有时使用此构造函数时,我得到的值不正确:
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)
有人能看到我在这里做错了什么吗?
提前致谢
答案 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 - 6
与0
Sunday
之间的星期几。因此,在您的情况下,02
月份正在进行,但是您将1
减去01
,这导致2015
是2月并且取决于闰年,您有29天或没有。由于年份为March 01
,2月份仅为28天,但您当天指定了29天,这就是为什么月份会转为{{1}}