Date.getMonth()方法有bug吗?

wil*_*n绿茶 29 javascript

我测试了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,依此类推.

  • 对我来说似乎没有意义......任何人都可以解释一下从零开始月份的逻辑是什么? (14认同)

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)

或许有点奇怪,但不是马车.


soh*_*ifa 9

getMonth()方法根据当地时间返回指定日期的月份(从0到11),例如.1月是0,2月是1.


Isw*_*San 7

在javascript月份从0开始.假设今天是02/04/2012,当你setMonth(1)它将尝试设置为feb.因为feb的最大日期是28/29,所以移动到下个月(3月,即2)