我的单页 javascript 应用程序通过 REST 调用以 JSON 格式检索数据。日期使用标准 ISO8601 格式的 UTC 时区格式化,例如2011-02-04T19:31:09Z
.
注册服务时,用户从下拉列表中选择他们的时区。此时区可能与用户浏览器的时区不同。javascript 应用程序始终知道用户选择的时区是什么。
我知道如何将 UTC 字符串转换为日期。我了解 Javascript 仅代表本地时区的日期。
但是我在弄清楚如何显示为时区 OTHER 而不是用户的本地时区格式化的日期时遇到了麻烦。它必须考虑所有日期的 DST。在内部,我想将所有日期作为 UTC 处理,并且只在显示时间转换为另一个时区中日期的字符串表示形式。我需要显示在用户个人资料中选择的时区中的日期,而不是他们浏览器的时区。
我已经尝试使用服务器发送用户浏览器时区和用户配置文件时区之间的时区偏移差异(以毫秒为单位)。但我发现我不能只发送一个偏移值,而是需要为每个日期发送一个偏移量,以说明 DST 的变化。
关于如何显示不同时区格式的日期的任何建议或示例代码?到目前为止我发现的选项:
- 服务器将日期作为已在正确时区格式化的字符串发送,并且在客户端上不进行日期解析或操作。这使得在客户端上做某些事情即使不是不可能也很困难。
- 使用诸如https://github.com/mde/timezone-js之类的库,它将整个 Olson TZ 数据库包含到 Javascript 中。这意味着更长的加载时间更多的内存使用等。
- 将 timezoneOffsetMillis 值与发送给客户端的每个日期一起发送。这会导致混乱的 JSON 数据和非最佳的 REST 接口。
有没有更简单或更好的解决方案?