Javascript Date()有时返回错误的值

时间:2015-01-23 22:49:06

标签: javascript date

有时使用此构造函数时,我得到的值不正确:

new Date(year, month, day, hours, minutes, seconds, milliseconds);

我确定这是我做错了但却无法看到的。这就是我正在做的事情:

我有一个包含月,日和年索引的数组

["02", "29", "2015"]

然后我正在制作像这样的Date对象

date = new Date(dateArray[2], dateArray[0] - 1, dateArray[1], 0, 0, 0, 0);

当我将日期对象打印到控制台时,我得到了这个:

Sun Mar 01 2015 00:00:00 GMT-0700 (MST)

但有时它会按预期工作。使用这个数组:

["03", "15", "2015"]

我明白了:

Sun Mar 15 2015 00:00:00 GMT-0600 (MDT)

有人能看到我在这里做错了什么吗?

提前致谢

2 个答案:

答案 0 :(得分:7)

因为 2015年2月29日没有!那不是闰年。 2月28日之后的第二天是3月1日。这是预期的行为。

精确行为在ECMAScript 5.1规范的§15.9.1.5中定义。

答案 1 :(得分:1)

在Javascript中,月份是从0开始的,因此如果您致电Date.getMonth(),则会得到0 - 11之间的值,Date.getDate()会在1 - 31之间的某一天返回, Date.getDay()返回0 - 60 Sunday之间的星期几。因此,在您的情况下,02月份正在进行,但是您将1减去01,这导致2015是2月并且取决于闰年,您有29天或没有。由于年份为March 01,2月份仅为28天,但您当天指定了29天,这就是为什么月份会转为{{1}}