javascript date setMonth当日期为31并且下个月没有它时失败

时间:2018-10-29 22:21:06

标签: javascript date

设置下一天或下个月的实际日期不正确时,操作日期不能按预期运行

>var date = new Date('2018/10/31');
undefined
>date
Wed Oct 31 2018 00:00:00 GMT-0600 (hora estándar central)
>date.setMonth(date.getMonth() + 1);
1543644000000
>date
Sat Dec 01 2018 00:00:00 GMT-0600 (hora estándar central)

这是一个错误,应该将其报告或视为预期的行为吗?

1 个答案:

答案 0 :(得分:1)

已记录为行为。以https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMonth的引用为例:

  

如果您指定的参数超出预期范围,则setMonth()会尝试相应地更新Date对象中的日期信息。例如,如果您对monthValue使用15,则年份将增加1,而3将用于月份。

     

该月的当前日期将影响此方法的行为。从概念上讲,它将把当月的当前日期给定的天数与指定为参数的新月的第一天相加,以返回新的日期。例如,如果当前值为2016年8月31日,则调用setMonth值为1将返回2016年3月2日。这是因为在2016年2月有29天。

在您的情况下,它正在执行上面第二段中所述的操作:您已将月份更改为11月,但未更改日期。当然没有11月31日,因此JavaScript会自动将日期设置为下一个有效日期,即12月1日。