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