Firestore FieldValue.serverTimestamp()正在保存本地时间戳,而不是服务器的时间戳

时间:2020-06-30 11:06:17

标签: ios swift firebase google-cloud-firestore

  • 我有一个聊天应用程序,当前我使用 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()])
}

这是结果:

This was the local time in India

1 个答案:

答案 0 :(得分:1)

您将在doc中阅读

时间戳记表示一个时间点,与任何时区或 日历,以秒和秒的分数表示 纳秒分辨率 UTC纪元时间

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


结论:

  • 问题:“如何存储一个全球时间?”答案:“对于FieldValue.serverTimestamp(),已经存在,它存储在UTC中。”
  • 在您的应用中,由您决定如何显示时间戳记值(以UTC或转换为用户时区)。
相关问题