javascript日期setMonth在第31天并且下个月没有它时失败



当设置没有实际日期的下个月或上个月时,操作日期未按预期工作

>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)

这是一个错误吗?它应该被报告还是被视为预期行为?

这是有文档记录的行为。引用自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMonth例如:

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

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

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

相关内容

最新更新