0

我正在使用FormatJS 库和 Handlebars来显示过去发生的事件列表。我在我的服务器的 REST API 上调用一个端点,它返回 Json 中的事件列表,并为每个事件显示日期时间。ATM 我使用 GMT 时区在数据库中保存日期时间。

所以当我得到我的 Json 时,我正在处理这样的日期时间:

{{formatRelative commentDate}}

我的问题是,由于日期时间是在 GMT 中存储的,所以它们也会这样显示。例如,由于我在 GMT+2 时区,一旦创建了新事件并显示在列表中,我就会看到它“发生在 2 小时前”,而应该是“几秒钟前”。

那么,有什么办法可以解决这个问题吗?我在我的数据库中以 GMT 格式保存日期时间是否犯了错误,如果是这样,您将如何处理来自不同时区的日期时间并将它们显示给其他时区的人?

当然,我可以自定义formatRelative助手来玩getTimezoneOffset并获得想要的结果,但我想知道是否有更好的事情要做。

非常感谢!

4

1 回答 1

2

理解您的问题的关键是您在评论中写的内容:

获取 Json,包含格式中的日期2016-02-28 10:15:53时间 - 这是 UTC 时间

您应该确保 JSON 中的值是完整的 ISO8601 格式,包括适当的偏移量或Z字符来指示 UTC: 2016-02-28T10:15:53Z

如果没有偏移量,大多数实现将考虑以本地时间表示的值,这解释了您的结果。

因此,问题在于您的服务器端代码,而不是您的 JavaScript 代码。当从 JSON 解析日期字符串时,您可以应用客户端解决方法,但实际上最好的解决方案是在服务器上对其进行限定。

于 2016-02-28T17:23:33.423 回答