首页 > 解决方案 > Firebase 时间戳返回错误的日期 - Javascript

问题描述

我正在尝试从 firestore 获取时间戳值(使用 Firebase 函数),并且我已经使用 Timestamp 的 toDate() 方法和矩库成功地在本地完成了它。

moment(doc.data().EndDate.toDate())

但是,当我将代码部署到 firebase 并测试该函数时,toDate() 以某种方式返回的 Date 比 firebase 上保存的时间戳少 1 小时。我想它正在将我的日期转换为UTC,因为我在UTC + 1,并且时间戳也与UTC + 1一起存储在firestore中,但我不知道如何可靠地获取时间戳日期,就像在firestore中一样,无论时区如何。

如果有人知道为什么会发生这种情况或知道如何解决它,那就太好了。

标签: javascriptreactjsfirebasegoogle-cloud-firestoretimestamp

解决方案


Firestore 中的所有时间戳都以 UTC 格式存储。 如果您在 Firebase 控制台中看到不同的内容,那只是您的浏览器将其格式化为您的本地时区。

在 JavaScript 中,所有 Date 对象也以 UTC 表示。如果您将其格式化为字符串,您可能会再次根据您的本地时区获得不同的表示形式。

如果您编写使用日期或时间戳计算值的代码,则应使用 UTC 执行所有计算。这几乎是所有计算系统想要处理的日期。当需要格式化日期以显示给最终用户时,您才应该考虑时区,并根据用户的喜好呈现一些东西。


推荐阅读