我使用FormatJS library along with Handlebars来显示过去发生的事件列表。我在我的服务器的REST API上调用一个端点,它返回Json中的事件列表,并为每个事件显示日期时间。 ATM我使用GMT时区将日期时间保存在数据库中。使用REST Api和JS时区问题
所以,当我得到我的JSON,我处理日期时间是这样的:
{{formatRelative commentDate}}
我的问题是,因为日期时间在GMT放养,它们也显示这样的。例如,因为我在GMT + 2时区,所以只要创建新事件并显示在列表中,我就会看到它“在2小时前发生”,而它应该是“几秒前”。
那么,有没有一种方法可以处理这个问题?我在保存日期格林尼治标准时在我的数据库中犯了错误,如果是这样,你将如何处理来自不同时区的日期时间并将它们显示给其他时区中的人?
当然,我可以自定义formatRelative
帮手与getTimezoneOffset
一起玩,并得到想要的结果,但我想知道是否有更好的办法。
非常感谢!
以UTC为单位存储日期通常是首选,因为它可以简单地转换为任何其他时区。另外,ECMAScript Date对象的核心是UTC。你的问题似乎是关于将“JSON”日期转换为本地日期,但是你不会告诉你如何做到这一点。 – RobG
@RobG因为我没有转换任何东西!获取包含日期时间的Json,格式为“2016-02-28 10:15:53” - 这就是UTC时间,直接在'formatRelative'助手中使用它(如图所示),而不再做任何事情。 –
在体系结构的更多中心部分的世界时间是一个很好的方法:http://currentmillis.com/standard/specification/c/我不认为你犯概念错误,这听起来像你的抵消失去了某个地方。 http://formatjs.io/handlebars/#formatRelative让我相信实际上被格式化的时间被定义为Epoch以来毫秒数的时间,但是我看到你正在返回一个人类可读的时间。是否有一个约定,服务器返回的时间被解释为UTC? (因为你没有指定时区,不应该有一个UTC或GMT到底?) – Sandman