简洁版本
在 JavaScript 中,是否可以new Date(2013, 9, 20)
合法地返回 10 月 19 日?
长版
当夏令时开始时,由于时钟向前调整,本地时间会出现差距。如果我构造一个Date
时间在这个间隔内的对象,根据 ECMAScript 规范,预期的行为是什么?
各种浏览器的行为不同,如下所示。(我在 Windows 8 上运行了这些测试。)
示例 1:在太平洋时区 (UTC-08) 中,表达式
new Date(2013, 2, 10, 2, 34, 56).toString() // Sun Mar 10 2013 02:34:56
给出以下结果:
IE 10: Sun Mar 10 03:34:56 PDT 2013
IE 11: Sun Mar 10 2013 03:34:56 GMT-0700 (Pacific Daylight Time)
Chrome 29: Sun Mar 10 2013 01:34:56 GMT-0800 (Pacific Standard Time)
Firefox 23: Sun Mar 10 2013 03:34:56 GMT-0700 (Pacific Standard Time)
示例 2:在巴西利亚时区 (UTC-03) 中,表达式
new Date(2013, 9, 20, 0, 34, 56).toString() // Sun Oct 20 2013 00:34:56
给出以下结果:
IE 10: Sun Oct 20 01:34:56 UTC-0200 2013
IE 11: Sun Oct 20 2013 01:34:56 GMT-0200 (E. South America Daylight Time)
Chrome 29: Sat Oct 19 2013 23:34:56 GMT-0300 (E. South America Standard Time)
Firefox 23: Sat Oct 19 2013 23:34:56 GMT-0300
综合这两个例子,好像IE把时间往前调,Chrome把时间往后调,Firefox拿不定主意。
规范的内容:根据我收集到的信息,new Date(yyyy, mm-1, dd, hh, mi, ss)
构造一个Date
时间值为 UTC(yyyy-mm-dd hh:mi:ss)的 a,其中
UTC( t ) = t – LocalTZA – DaylightSavingTA( t – LocalTZA)
LocalTZA 是标准时间的本地时区调整(例如,太平洋时区的 -08:00),而 DaylightSavingTA( t ) 是t的夏令时调整(例如,DST 期间的 01:00,否则为 00:00 )。
但是,我不清楚 DaylightSavingTA在太平洋时区或 t = 2013-10-20 03:34:56 在太平洋时区的参数应该返回什么.