我正在使用FormatJS library along with Handlebars显示过去发生的事件的列表。我正在服务器的 REST API 上调用一个端点,该端点返回 Json 格式的事件列表,并显示每个事件的日期时间。 ATM 我正在使用 GMT 时区将日期时间保存在数据库中。
因此,当我获取 Json 时,我会像这样处理日期时间:
{{formatRelative commentDate}}
我的问题是,由于日期时间是以 GMT 存储的,因此它们的显示也是这样的。例如,由于我位于 GMT+2 时区,一旦创建新事件并显示在列表中,我就会看到它“发生在 2 小时前”,而它应该是“几秒钟前”。
那么,有什么办法可以解决这个问题吗?我在数据库中保存 GMT 日期时间时是否犯了错误?如果是,您将如何处理来自不同时区的日期时间并将其显示给其他时区的人们?
当然,我可以自定义 formatRelative
帮助器来使用 getTimezoneOffset
并获得想要的结果,但我想知道是否有更好的事情要做。
非常感谢!
最佳答案
理解你的问题的关键是你在评论中所写的内容:
Getting the Json, containing datetimes in the format
2016-02-28 10:15:53
- that's UTC time
您应确保 JSON 中的值采用完整的 ISO8601 格式,包括指示 UTC 的适当偏移量或 Z
字符:2016-02-28T10:15:53Z
如果没有偏移量,大多数实现都会考虑以本地时间表示的值,这会解释您的结果。
因此,问题出在服务器端代码上,而不是 JavaScript 代码上。当从 JSON 解析日期字符串时,您可能可以应用客户端解决方法,但实际上最好的解决方案是在服务器上对其进行限定。
关于javascript - 使用 REST Api 和 JS 时的时区问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35682247/