This question already has answers here:
Add 30 days to date (mm/dd/yy)
                                
                                    (3个答案)
                                
                        
                                2年前关闭。
            
                    
设置下一个或上一个月的实际日期不正确时,操作日期无法按预期工作

>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对象中的日期信息。例如,如果您对monthValue使用15,则年份将增加1,而3将用于月份。
  
  该月的当前日期将影响此方法的行为。从概念上讲,它将把当月的当前日期给定的天数与指定为参数的新月的第一天相加,以返回新的日期。例如,如果当前值为2016年8月31日,则调用值为1的setMonth将返回2016年3月2日。这是因为在2016年2月有29天。


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

关于javascript - javascript date setMonth当日期为31并且下个月没有它时失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53054731/

10-14 13:35
查看更多