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