【问题标题】:How to get a JavaScript Date object from the new `firebase.firestore.FieldValue.serverTimestamp()`如何从新的`firebase.firestore.FieldValue.serverTimestamp()` 中获取 JavaScript 日期对象
【发布时间】:2018-12-27 04:49:06
【问题描述】:

Firebase Firestore 最近changed how they manage timestamps,我无法从时间戳中检索date 对象。

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

【问题讨论】:

    标签: javascript firebase google-cloud-firestore


    【解决方案1】:

    我终于可以得到我需要的东西了

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

    【讨论】:

    • 谢谢。我必须在 seconds 键中添加下划线 (_) 才能使其工作:new Date(firebase.firestore.Timestamp.now()._seconds*1000).toLocaleDateString()
    【解决方案2】:

    你只需要这样做:

    yourFirestoreTimestamp.toDate()
    

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

    --

    但是,请注意,当您尚未与 Firestore 同步时 FieldValue.serverTimestamp() 没有提供任何价值。

    只有在您与 Firestore 同步并再次获取数据后,prop 才会从 serverTimestamp → 更改为 Timestamp

    您还会看到保存在 Timestamp 对象中的更多信息:

    【讨论】:

    • 这不适用于firebase.firestore.FieldValue.serverTimestamp() 的返回值,它不是时间戳类型的对象。仅在文档值实际写入文档后,返回的标记值才会成为时间戳,正如我在此处的回答中所描述的那样。
    • @DougStevenson 感谢您提供的信息。我已更新我的答案,以在您的评论中包含信息。
    【解决方案3】:

    firebase.firestore.FieldValue.serverTimestamp() 只返回一个标记对象,您在将字段写入文档时使用该对象。它指示服务器应将其替换为实际的Timestamp 对象。 serverTimestamp() 本身不包含任何日期信息,不能转换为日期。

    当你将标记值写入一个文档,然后再读出来,它会变成一个Timestamp类型的对象,你可以通过它的toDate()方法将它转换成一个原生的Date对象

    【讨论】:

      猜你喜欢
      • 2021-07-30
      • 1970-01-01
      • 2013-03-23
      • 1970-01-01
      • 2011-01-02
      • 1970-01-01
      • 2012-03-18
      • 2021-11-28
      相关资源
      最近更新 更多