如何从新的`firebase.firestore.FieldValue.serverTimestamp()`获取JavaScript Date对象

17

Firebase Firestore最近更改了时间戳的管理方式,我无法从时间戳中获取date对象。

如何从新的firebase.firestore.FieldValue.serverTimestamp()获取date对象?

4个回答

46

你只需要做这个:

yourFirestoreTimestamp.toDate()

如果你在控制台中查看Timestamp对象,你会发现.toDate()是每个Timestamp默认可用的函数。

--

然而,请注意当您尚未与Firestore同步时,FieldValue.serverTimestamp()不会提供任何有价值的内容。
只有在您与Firestore同步并重新获取数据后,该属性才会从serverTimestamp更改为Timestamp
您还将看到更多信息保存在Timestamp对象中:

preview of Timestamp in the console


2
这不适用于 firebase.firestore.FieldValue.serverTimestamp() 的返回值,因为它不是一个时间戳类型的对象。只有在文档值实际写入文档后,返回的标记值才会变成时间戳,就像我在这里回答中所描述的那样。 - Doug Stevenson
@DougStevenson 感谢您提供的信息。我已经更新了我的答案,包括您在评论中提供的信息。 - mesqueeb

18

firebase.firestore.FieldValue.serverTimestamp()只是返回一个占位符对象,当您向文档写入字段时使用它。它表示服务器应该将其替换为实际的Timestamp对象。 serverTimestamp()本身不包含任何日期信息,您无法将其转换为日期。

当您将占位符值写入文档并读取它时,它将成为Timestamp类型对象,您可以使用其toDate()方法将其转换为本机日期对象。


12

最终,我得到了我所需要的东西。

new Date(firebase.firestore.Timestamp.now().seconds*1000).toLocaleDateString()

3
谢谢。我必须在“seconds”键中添加下划线(_)才能使其正常工作:new Date(firebase.firestore.Timestamp.now()._seconds*1000).toLocaleDateString() - allegutta

-1

如果你正在寻找2022年的解决方案,这里就有:

admin.firestore.FieldValue.serverTimestamp()

您需要导入admin才能使其像这样工作:

const admin = required("firebase-admin");

请注意,此功能仅适用于节点环境,例如云函数。

不清楚你在谈论 admin-sdk,也不知道 admin 是从哪里来的。新手开发人员可能会对这篇文章感到非常困惑。此外最好提到这不能在浏览器中使用,只能在 Node 环境中使用,例如云函数。 - mesqueeb
如何将其转换为日期? - Roman Soviak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接