首页 > 解决方案 > 如何在 Firebase 函数中将 Firebase Firestore 时间戳转换为 Zulu 日期时间格式

问题描述

我在 Firestore 文档中有一个时间戳字段。(参考 created_at)

约会时间

我想将它传递给服务器一个 Datetime Zulu 时间格式,如下所示。

2019-10-31T10:29:45Z

如何将 Firestore 时间戳转换为 Zulu 时间格式字符串?

这是我在 Firebase 中的 onCreate 函数,在 Firestore 中创建文档后,我读取了时间戳字段并打印到控制台

exports.createRecord = functions.firestore
  .document(`record/{recordId}`)
  .onCreate(async (snap, context) => {

  console.log(snap.data().created_at);

});  

这将显示在 Firebase 函数日志中

Timestamp { _seconds: 1573496322, _nanoseconds: 897429000 }

如何将其转换为以下形式:

2019-11-01T01:36:56.233018Z
2019-01-01T00:00:00Z
2019-10-31T10:29:45Z

标签: firebasedatetimegoogle-cloud-firestoretimestampgoogle-cloud-functions

解决方案


Firestore Timestamp对象不是 JavascriptDate对象的扩展。但它包含一个toDate获取常规Date对象的方法,您可以使用该方法轻松地将所需的日期格式化为字符串。

云函数在没有时区偏移(UTC 时间)的情况下运行。因此,当您格式化日期时,您可以有效地获得 Zulu 时间。用于toISOString获取所需格式的字符串

toISOString() 方法以简化的扩展 ISO 格式 (ISO 8601) 返回一个字符串,该字符串的长度始终为 24 或 27 个字符(YYYY-MM-DDTHH:mm:ss.sssZ 或 ±YYYYYY-MM-DDTHH:mm:ss。 sssZ,分别)。时区始终为零 UTC 偏移量,如后缀“Z”所示。

尝试将上面的代码更改为此,您将看到您期望的输出。

exports.createRecord = functions.firestore
  .document(`record/{recordId}`)
  .onCreate(async (snap, context) => {

  console.log(snap.data().created_at.toDate().toISOString());

});  

其他资源

如果您需要更复杂地操作日期或使用时区,Moment JS是一个很棒且易于使用的库。它给你的函数依赖增加了一些开销,但它确实有助于你的代码的可读性。


推荐阅读