使用REST Api和JS时的时区问题

时间:2016-02-28 12:00:21

标签: javascript rest timezone handlebars.js formatjs

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

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

{{formatRelative commentDate}}

我的问题是,由于日期时间是格林威治标准时间,它们也会显示出来。例如,由于我在GMT + 2时区,一旦新事件被创建并显示在列表中,我看到它“发生在2小时前”,而它应该是“几秒钟前”。< / p>

那么,有什么方法可以解决这个问题吗?我在DB中保存GMT中的日期时间时出错了吗?如果是这样,您将如何处理来自不同时区的日期时间并将其显示给其他时区的人?

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

非常感谢!

1 个答案:

答案 0 :(得分:1)

理解你的问题的关键是你在评论中写的:

  

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

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

没有偏移量,大多数实现都会考虑在本地时间中表示的值,这可以解释您的结果。

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