提问者:小点点

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


  • 我有一个聊天应用程序&; 目前,我使用1970年以来的时间间隔来处理日期。 这就是它在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()])
}

结果如下:


共1个答案

匿名用户

正如您将在文档中读到的:

时间戳表示与任何时区或日历无关的时间点,表示为秒和秒的分数,以UTC历元时间的纳秒分辨率表示。

如果您在Firebase控制台中看到“the local time is display in the document”,这是因为Firebase控制台使用您计算机的时区配置来显示您本地时间中的时间戳值。

最后:

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