【问题标题】:Firestore FieldValue.serverTimestamp() is saving the local timestamp instead of server's timestampFirestore FieldValue.serverTimestamp() 正在保存本地时间戳而不是服务器的时间戳
【发布时间】:2020-06-30 11:06:17
【问题描述】:
  • 我有一个聊天应用程序,目前我使用 timeIntervalSince1970 处理日期。这就是它在 Firestore 中的存储方式
  • 由于两个人可以从两个不同的国家/地区聊天,因此我采用 本地时间戳 来处理此问题,将其转换为 GMT 时间戳,然后将其存储在 Firestore 中
  • 事实证明这是一个糟糕的实现,因为我们不应该依赖设备时间,所以我只是转而使用 Firestore 的 FieldValue.serverTimestamp()
  • 我认为 firebase 将使用它自己的服务器时间(我的 firebase 服务器在美国),但它似乎将其存储在当地时间(我目前在印度)
  • 我在这里缺少什么?我知道它以 UTC 存储,但本地时间显示在文档中。如何存储单个全球时间?

代码如下:

func firebaseTimestampSet(){
    guard let currentUid = Auth.auth().currentUser?.uid else {return}
    let ref = Firestore.firestore().collection("dateTest").document(currentUid)
    ref.setData(["timestamp": FieldValue.serverTimestamp()])
}

结果如下:

【问题讨论】:

    标签: ios swift firebase google-cloud-firestore


    【解决方案1】:

    正如您将在doc 中看到的那样:

    时间戳代表一个时间点独立于任何时区或 日历,表示为秒和秒的分数 纳秒分辨率UTC 纪元时间

    如果您在 Firebase 控制台中看到“本地时间显示在文档中”,那是因为 Firebase 控制台使用您计算机的时区配置来显示您本地时间的时间戳值。


    总结:

    • 问题:“如何存储单个全球时间?”答:“FieldValue.serverTimestamp() 已经是这样了,它以 UTC 存储”。
    • 在您的应用中,您可以决定如何显示时间戳值(作为 UTC 或转换为用户的时区)。

    【讨论】:

    • 哇!感谢那。我想他们应该在文档中提到,在控制台中它会显示您的系统日期和时间
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 2021-04-19
    • 1970-01-01
    • 2016-01-06
    相关资源
    最近更新 更多