我已经设置了UTC的截止日期,如下所示,我想知道toLocaleString()方法究竟在用户的本地机器上做了什么。例如,如果它们处于识别它的时区,它会占用夏令时吗?或者我是否需要插入检查用户所在位置的其他代码,然后修复显示的时间?
http://javascript.about.com/library/bldst.htm
var deadline = new Date('5/1/2013 ' + "16:15" + ' UTC');
alert(deadline.toLocaleString());
答案 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