在 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)
我真的很好奇为什么会发生这种情况。
有人愿意透露一些信息吗?
在 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
原因是上面的第二个示例使用了接受数字而不是字符串的构造函数版本Date
,并且 JavaScript 中的月份数字以 0 = 一月开头。所以new Date(2012, 1, 1)
(你的例子中的领先0
在技术上是一个错误,但大多数引擎允许它并将数字视为八进制)是2012 年2 月1 日。
上面的第一个版本使用Date
接受字符串并对其进行解析的构造函数,在解析日期字符串时,月份数字通常以 1 = 一月开始。请注意,您要求 Chrome 解析的字符串不是规范定义的任何格式,其他引擎可能无法解析它。事实上,直到 ECMAScript 5 之前,都没有定义日期字符串格式(Date
接受字符串的构造函数被定义为接受任何toString
输出,但实际上都没有指定)。ECMAScript 5 添加了 ISO-8601 的简化版本。但是在野外,过去十年中的每个引擎都支持形式的日期字符串yyyy/mm/dd
(但不一定是现在指定的yyyy-mm-dd
)。