在Javascript中使用时区和夏令时

Tau*_*ren 22 javascript timezone datetime utc dst

我的单页javascript应用程序通过REST调用以JSON格式检索数据.使用标准ISO8601格式的UTC时区格式化日期,例如2011-02-04T19:31:09Z.

注册该服务时,用户从下拉列表中选择他们的时区.此时区可能与用户浏览器的时区不同.javascript应用程序始终知道用户选择的时区是什么.

我知道如何将UTC字符串转换为日期.我知道Javascript只代表当地时区的日期.

但是我遇到了麻烦,想知道如何显示为时区而不是用户的本地时区格式化的日期.它必须在所有日期考虑DST.在内部,我希望将所有日期作为UTC处理,并且仅在显示时转换为另一时区中日期的字符串表示.我需要在用户个人资料中选择的时区中显示日期,而不是浏览器的时区.

我已经尝试过服务器发送用户浏览器时区和用户配置文件时区之间的时区偏移差异(以毫秒为单位).但我发现我不能只发送一个偏移值,但需要为每个日期发送一个偏移量来解释夏令时的变化.

有关如何显示各种时区格式的日期的任何建议或示例代码?到目前为止我找到的选项:

  1. 服务器将日期作为已在正确时区格式化的字符串发送,并且不在客户端上进行日期解析或操作.这使得在客户端做某些事情很困难,如果不是不可能的话.
  2. 使用诸如https://github.com/mde/timezone-js之类的库,其中包括整个Olson TZ数据库到Javascript中.这意味着加载时间越长,内存使用量越多等.
  3. 使用发送到客户端的每个日期发送timezoneOffsetMillis值.这会导致混乱的JSON数据和非最佳REST接口.

有没有更简单或更好的解决方案?

Mic*_*lon 5

2是个坏主意,因为正如你所指出的那样,它增加了加载时间.如果我是你,我会做1和3的组合.我不同意这会使JSON数据混乱或REST接口不是最佳的.

这是一种经典的权衡,可以在协议中接受更多的复杂性,以简化客户端代码.