我正在使用FormatJS library along with Handlebars来显示过去发生的事件列表。我正在服务器的REST API上调用一个端点,它返回Json中的事件列表,并显示每个事件的日期时间。 ATM我使用GMT时区在数据库中保存日期时间。
所以当我得到我的Json时,我正在处理这样的日期时间:
{{formatRelative commentDate}}
我的问题是,由于日期时间是格林威治标准时间,它们也会显示出来。例如,由于我在GMT + 2时区,一旦新事件被创建并显示在列表中,我看到它“发生在2小时前”,而它应该是“几秒钟前”。< / p>
那么,有什么方法可以解决这个问题吗?我在DB中保存GMT中的日期时间时出错了吗?如果是这样,您将如何处理来自不同时区的日期时间并将其显示给其他时区的人?
当然,我可以自定义formatRelative
助手以使用getTimezoneOffset
并获得想要的结果,但我想知道是否有更好的事情要做。
非常感谢!
答案 0 :(得分:1)
理解你的问题的关键是你在评论中写的:
获取Json,其中包含
2016-02-28 10:15:53
格式的日期时间 - 该时间
您应确保JSON中的值采用完整的ISO8601格式,包括指示UTC的相应偏移量或Z
字符:2016-02-28T10:15:53Z
没有偏移量,大多数实现都会考虑在本地时间中表示的值,这可以解释您的结果。
因此,问题在于您的服务器端代码,而不是您的JavaScript代码。当从JSON解析日期字符串时,可能存在可以应用的客户端解决方法,但实际上最好的解决方案是在服务器上对其进行限定。