我测试了chrome和firefox,这就是问题所在.Date对象的getMonth()方法有Bug吗?当我在someDay上设置位置日期时,就像"2013-1-31"
那么,js代码是:
var d = new Date();
d.setMonth(8);
d.getMonth();
Run Code Online (Sandbox Code Playgroud)
结果是"9",为什么?
我发现当月有31天时,运行setMonth方法并且getMonth方法将返回错误的值
为什么?
wcr*_*aft 72
getMonth()方法根据本地时间返回指定日期的月份(从0到11).
注意:1月是0,2月是1,依此类推.
hru*_*ing 40
让我们打破这个:
var d = new Date(); // date is now 2013-01-31
d.setMonth(1); // date is now 2013-02-31, which is 3 days past 2013-02-28
x = d.getMonth(); // what to do, what to do, 3 days past 2013-02-28 is in March
// so, expect x to be March, which is 2
Run Code Online (Sandbox Code Playgroud)
当日值d大于传递的月份中的最大天数时,这只是一个问题setMonth().否则,它会按照您的预期工作.
小智 12
最简单的解决方案是向setMonth添加第二个参数:
var d = new Date();
d.setMonth(8,1);
d.getMonth(); //outputs 8
Run Code Online (Sandbox Code Playgroud)
http://www.w3schools.com/jsref/jsref_setmonth.asp
Date.setMonth(月,日)
日:可选.表示日期的整数期望值为1-31,但允许使用其他值:
0将导致上个月的最后一天-1将导致前一个月的最后一天前一天如果该月有31天:
32将导致下个月的第一天如果该月有30天:
32将导致下个月的第二天
sya*_*ani 10
JavaScript中的月份表示为0-11.第1个月是2月只有28/29天,所以当你将月份设置为1时,它会尝试将日期自动更正为3月,以便建立一个有意义的日期(自2月31日起,没有意义).尝试使用toDateString函数来看看我的意思:
var d = new Date('2013/01/31');
d.setMonth(2);
console.log(d.toDateString()); // outputs Match 3rd, 2013
Run Code Online (Sandbox Code Playgroud)
或许有点奇怪,但不是马车.
在javascript月份从0开始.假设今天是02/04/2012,当你setMonth(1)它将尝试设置为feb.因为feb的最大日期是28/29,所以移动到下个月(3月,即2)