firebase - 如何在 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
解决方案
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是一个很棒且易于使用的库。它给你的函数依赖增加了一些开销,但它确实有助于你的代码的可读性。
推荐阅读
- c# - 使用带有 API_KEY 的 SendGrid 在 C# 中发送电子邮件
- c - 如何在每个字符串中显示将被字符串中的下一个字符替换的字符(使用 BS DELETE)
- sql-server - 为什么我的 SQL 函数不应该是不确定的?
- python - 如何将 python 字典中的数组转换为元组?
- javascript - 将不透明层添加到除所选图像之外的所有滑块图像
- r - 将向量重新缩放为 r 中的特定平均值
- mysql - 更新从同一个表中的另一行获取的现有行中的数据
- android - Jetpack Compose 如何在 Composable 完成后异步下载图像并释放资源?
- html - 为什么照片下面有黑色的东西?
- swift - Swift - 如何创建一个只包含时间的日期对象