在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)
我真的很好奇为什么会这样。
任何人都想轻视一下?
答案 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
)。