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

标签 javascript rest timezone handlebars.js formatjs

我正在使用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/

相关文章:

ruby-on-rails - Ruby - 获取下一个夏令时更改

ruby-on-rails-3 - 帮助了解 Rails 3 中的时间和时区

javascript - 如何就地删除跨度?

c# - 我如何使用 post 方法调用 Rest Web 服务并在 C# 中发送 xml 数据

javascript - 使用带有 Javascript 的 Mailgun 发送电子邮件

java - Spring Rest Controller POST 请求不起作用

javascript - 我应该如何在 webpack 中使用时刻时区?

javascript - 如何捕获我点击的项目,以便将其传递给 API - VueJS 和 Quasar

javascript - MIME 类型 ('text/html') 错误

javascript - 如何在您的网站上创建代码高亮 block