Javascript是否与DST的LocaleString帐户约会?

时间:2013-05-01 12:06:43

标签: javascript date timezone

我已经设置了UTC的截止日期,如下所示,我想知道toLocaleString()方法究竟在用户的本地机器上做了什么。例如,如果它们处于识别它的时区,它会占用夏令时吗?或者我是否需要插入检查用户所在位置的其他代码,然后修复显示的时间?

http://javascript.about.com/library/bldst.htm

var deadline = new Date('5/1/2013 ' + "16:15" + ' UTC');
alert(deadline.toLocaleString());

3 个答案:

答案 0 :(得分:2)

当您使用“UTC”时,日期本身将是UTC格式,但 toLocaleString()会考虑客户的区域设置,这意味着它将返回更新的字符串中的日期,其中包含客户区域的所有典型更改和语言环境设置(DST,日期/时间格式等)。
由于JS文档描述了这一点:“toLocaleString()方法使用语言环境设置将Date对象转换为字符串。”
如果您想避免这种情况,请改用toUTCString()方法。

我还建议您阅读问题Javascript dates: what is the best way to deal with Daylight Savings Time?的已接受解决方案以避免(至少,试图避免:)与JS,浏览器和语言环境相关的未来问题。

希望这有帮助!

答案 1 :(得分:2)

我们不知道toLocaleString方法究竟是做什么的(§15.9.5.5):

  

此函数返回String值。 String的内容是   依赖于实现,但用于表示日期   当前时区以方便,人类可读的形式出现   对应于主机环境当前的约定   区域设置。

但是,大多数实现都会考虑DST,如果它在当前本地时区有效。对于您的示例,我收到"Mittwoch, 1. Mai 2013 18:15:00“ - CEST

  

我是否需要插入检查用户所在位置的其他代码,然后修复显示的时间?

我认为您可以信任toLocaleString - 浏览器应该尊重用户的设置。如果您想手动执行此操作,请查看timezone.js

答案 2 :(得分:1)

一般来说,答案是。 JavaScript将根据运行它的计算机的时区设置在适当的本地时间表示UTC值。这包括调整夏令时。但是,正如其他人所指出的那样,细节是特定于实现的。

如果您想要一致的输出,我会使用库来格式化您的日期,而不是依赖于默认实现。最好的图书馆(恕我直言)是moment.js。主页上的实例将让您了解它的功能。

<强>更新

如果要将要转换的UTC值传递到正确的本地时间,并且该时间落入时区规则与当前时间不同的时间段,则结果将无效。这很疯狂,但确实如此 - 并且根据ECMA规范进行设计。阅读 - JavaScript Time Zone is wrong for past Daylight Saving Time transition rules