【问题标题】:converting from timestamp to date is diffrent from localhost and from server从时间戳转换为日期与本地主机和服务器不同
【发布时间】:2020-09-10 16:35:32
【问题描述】:

我正在开发应用程序,以 firebase 作为服务器,flutter 作为前端。 场景是我上传带有时间戳的新文档,其中包含这样的当前时间:

"timestamp": DateTime.now().toString(),

当我将它作为本地主机运行时,我看到该文档也保存了当前时间,但是当我在 cloude 服务器上运行它时,它保存了 +3 小时。我知道它与 UTC 有关,在我的国家,UTC 是 +3。服务器上的线路是:

console.log(req.body.timestamp);
let timeStamp = new Date(req.body.timestamp);
console.log(timeStamp);

例如,在本地主机上打印到该字符串 2020-05-23 23:16:03.735472 是:

>  2020-05-23 23:16:03.735472
>  2020-05-23T20:16:03.735Z

但来自服务器的是:

>  2020-05-23 23:16:03.735472
>  2020-05-23T23:16:03.735Z

为什么会这样?

【问题讨论】:

    标签: typescript firebase flutter google-cloud-firestore timestamp


    【解决方案1】:

    这看起来像是一个简单的时区问题。日期数据类型不会在其中存储时区数据。但是,当它们被打印时,它们通常使用为进行格式化的本地系统配置的默认时区。除非您想要机器的本地时区,否则您根本不应该信任该字符串格式。

    需要指出的一点是,将日期/时间对象存储为格式化字符串通常不是一个好主意。 Firestore 具有适当的时间戳数据类型,它始终使用 UTC 时区偏移 (+0) 存储时间戳值,这是所有现代计算机系统的所有日期/时间类型的规范。您应该使用它来存储您的日期,然后在您选择的特定时区在客户端上对其进行格式化。有很多日期实用程序可以为您进行这些转换。

    如果您想将当前时间存储在文档中,通常将FieldValue.serverTimestamp() 指定为值,Firestore 将在插入时提供时间戳值。在客户端,您将收到一个Timestamp 对象,该对象有一个 toDate() 方法将其转换为 dart 的原生对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-26
      • 1970-01-01
      • 2017-12-08
      • 1970-01-01
      • 2014-06-27
      • 2016-04-04
      • 2016-11-26
      • 1970-01-01
      相关资源
      最近更新 更多