3

在试图找出我在处理日历时遇到问题的原因时,我遇到了这个问题。当月份设置为 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 开始的。

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

4

1 回答 1

3

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

> 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 日。

于 2012-09-01T02:53:39.873 回答