【问题标题】:Firebase server time stamp same as local (almost)Firebase 服务器时间戳与本地(几乎)相同
【发布时间】:2020-08-08 11:21:31
【问题描述】:

Firebase 生成的服务器时间戳是否会自动转换为本地时间,因为我得到的时间戳与我的本地时间相同,还是我遗漏了什么?

_firestore.collection("9213903123").document().setData(
      {
        "title": title,
        "message": message,
        "deviceTimeStamp": DateTime.now(),
        "serverTimeStamp": FieldValue.serverTimestamp(),
      },
    );

运行上述语句后,我可以看到 devicetimestamp 和 serverTimeStamp 是相同的。 但他们的 seocons 稍有延迟。

Data In firestore...

deviceTimeStamp
8 August 2020 at 16:39:08 UTC+5:30
(timestamp)
message
"26"

serverTimeStamp
8 August 2020 at 16:39:16 UTC+5:30
title
"26"

我要做的事情基本上是根据日期时间排序,用户可以看到他何时创建了笔记,但是如果有人创建了笔记并将其存储到世界任何地方的火库中(无论位置如何)。威尔,他/她通过使用服务器时间戳来获取他们的本地时间(因为我想要这个,所以用户可以看到他们何时添加了他们的文档)。并且为了安全起见,我想使用服务器时间戳,所以如果设备与当前时间不同步。

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore


    【解决方案1】:

    Firestore 的FieldValue.serverTimestamp() 创建时间戳并将其存储在UTC Epoch time 在请求到达 Firestore 服务器的那一刻。

    调用serverTimestamp() 不会在调用它时创建时间戳,并且不依赖于用户的设备时间或时区。相反,它创建了可以被视为日期/时间的 占位符 的内容。此占位符仅在 Firebase 服务器接收请求后转换为时间戳。因此,Firestore 时间戳将始终至少稍晚于您的客户端日期/时间(假设客户端时间完全同步。)

    使用 Firestore 的时间戳通常可以满足您以一致的方式为全球用户存储日期/时间、按创建时间检索/排序笔记以及将时间戳转换为用户本地时区客户端的目标。但是,当您的用户离线时,您可能希望以稍微不同的方式处理事情。

    请参阅 Doug Stevenson 的 article,了解有关 Firestore 时间戳的有用、更详细的说明。

    【讨论】:

      猜你喜欢
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多