javascript日期库重复10月

时间:2012-09-01 02:49:58

标签: javascript datetime

在尝试查找我在处理日历时遇到问题的原因时,我遇到了这个问题。将月份设置为8时,日期设置为10月,当月份设置为9时,日期设置为10月。 要测试的代码

var d = new Date();
document.write(d.getMonth());
d.setMonth(8);
document.write(d.getMonth());
d.setMonth(9);
document.write(d.getMonth());

output:
799

当前日期是2012年8月31日,月份数应为7,因为javascript月份为0。

有人可以解释一下吗?我已经能够在多台计算机上重现它。

1 个答案:

答案 0 :(得分:3)

9月只有30天 - 当您将日期设置为31(或在某个月的31日创建日期),然后将月份更改为少于31天的日期JavaScript将日期滚动到下个月(在这种情况下10月)。换句话说,日期溢出。

> var d = new Date()
> d
Fri Aug 31 2012 22:53:50 GMT-0400 (EDT)
// Set the month to September, leaving the day set to the 31st
> d.setMonth(8) 
> d
Mon Oct 01 2012 22:53:50 GMT-0400 (EDT)

// Doing the same thing, changing the day first
> var d = new Date()
> d
Fri Aug 31 2012 22:53:50 GMT-0400 (EDT)
> d.setDate(30)
> d
Thu Aug 30 2012 22:53:50 GMT-0400 (EDT)
> d.setMonth(8)
Sun Sep 30 2012 22:53:50 GMT-0400 (EDT)

所以答案很简单,因为今天的日期是8月31日,9月31日是10月1日。