新日期(2012年,01,01)与新日期不同(2012 01 01)

时间:2012-07-19 22:15:42

标签: javascript

在chrome控制台中,

new Date('2012 01 01') 输出:Sun Jan 01 2012 00:00:00 GMT-0600 (Central Standard Time)

new Date(2012, 01, 01) 输出: Wed Feb 01 2012 00:00:00 GMT-0600 (Central Standard Time)

我真的很好奇为什么会这样。

任何人都想轻视一下?

1 个答案:

答案 0 :(得分:5)

我认为你的意思是:

new Date('2012 01 01');
new Date(2012, 01, 01); // Note the commas

原因是上面的第二个例子使用接受数字而不是字符串的the version of the Date constructor,JavaScript中的月份数字从0 = 1月开始。因此,new Date(2012, 1, 1)(示例中的前导0在技术上是错误的,但大多数引擎允许它并将数字视为八进制)二月 2012年第一季。

上面的第一个版本使用Date constructor that takes a string并对其进行解析,在解析日期字符串时,月份数通常以1 = 1月开头。请注意,您要求Chrome解析的字符串不是规范定义的任何格式,其他引擎可能无法解析它。实际上,在ECMAScript 5之前,有没有定义的日期字符串格式(接受字符串的Date构造函数被定义为接受任何toString输出,但实际上都没有指定)。 ECMAScript 5添加了ISO-8601的简化版本。但实际上,过去十年中的每个引擎都支持yyyy/mm/dd形式的日期字符串(但不一定是现在指定的yyyy-mm-dd)。