在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)
我真的很好奇为什么会这样.
有人想照亮一些光吗?
我想你的意思是:
new Date('2012 01 01');
new Date(2012, 01, 01); // Note the commas
Run Code Online (Sandbox Code Playgroud)
原因是上面的第二个例子使用了Date接受数字而不是字符串的构造函数的版本, JavaScript中的月份数字从0 = 1月开始.因此new Date(2012, 1, 1)(0您的示例中的前导在技术上是错误,但大多数引擎允许它并将数字视为八进制)是2012年2月 1日.
上面的第一个版本使用Date带有字符串并解析它的构造函数,并且在解析日期字符串时,月份数通常从1 = 1月开始.请注意,您要求Chrome解析的字符串不是规范定义的任何格式,其他引擎可能无法解析它.实际上,在ECMAScript 5之前,没有定义的日期字符串格式(Date接受字符串的构造函数被定义为接受任何toString输出,但实际上都没有指定).ECMAScript 5添加了ISO-8601的简化版本.但在野外,过去十年中的每个引擎都支持表单中的日期字符串yyyy/mm/dd(但不一定是现在指定的日期字符串yyyy-mm-dd).