我已经在UTC中设置了一个截止日期,如下所示,我想知道toLocaleString()方法在用户的本地机器上会对它做什么。例如,如果他们在一个可以识别夏令时的时区,它会考虑夏令时吗?或者我是否需要插入额外的代码来检查用户的位置,然后修复显示的时间?
http://javascript.about.com/library/bldst.htmvar deadline = new Date('5/1/2013 ' + "16:15" + ' UTC');
alert(deadline.toLocaleString());
一般来说,答案是是。JavaScript将根据运行它的计算机的时区设置,在适当的本地时间表示UTC值。这包括夏令时的调整。然而,正如其他人指出的,细节是具体实现的。
如果你想要一个一致的输出,我会使用一个库来格式化你的日期,而不是依赖于默认的实现。最好的库(恕我直言)是moment.js。他们主页上的实例可以让你了解它的功能。
如果您传递的UTC值要转换为正确的本地时间,并且该时间属于时区规则与当前时区规则不同的时间段-那么结果将无效。这很疯狂,但却是真的——而且是ECMA规范的设计。Read - JavaScript时区对于过去的日光节约时间转换规则是错误的
我们不知道toLocaleString
方法到底是做什么的(§15.9.5.5):
这个函数返回一个String值。字符串的内容是与实现相关的,但是打算在当前时区以方便的、人类可读的形式显示对应于主机环境当前的约定语言环境。
但是,是的,如果夏令时在当前本地时区处于活动状态,大多数实现都会考虑夏令时。对于你的例子,我得到"Mittwoch, 1. Mai 2013 18:15:00
" - CEST。
我是否需要插入额外的代码来检查用户的位置,然后修复显示的时间?
我认为你可以信任toLocaleString
-浏览器应该尊重用户的设置。如果你想手动操作,请查看timezone.js。
当您使用"UTC"时,日期本身将是UTC格式,但 toLocaleString()
考虑到客户端的区域设置,这意味着它将以字符串形式返回日期,更新了客户端的区域和区域设置(DST,日期/时间格式等)的所有和所有典型更改。
正如JS文档所描述的那样:" toLocaleString()方法使用区域设置将Date对象转换为字符串。"。
如果您想避免这种情况,请使用toUTCString()
方法。
我还建议阅读Javascript日期问题的公认解决方案:处理日光节约时间的最佳方法是什么?避免(至少,尽量避免:)未来与JS、浏览器和语言环境相关的问题。
希望这对你有帮助!