如图,js代码今天是7月31,为什么输入“-1”会返回7月1日,而不是6月30?

function getMonthAfter (num){
    var dt = new Date();
    dt.setMonth( dt.getMonth()+num );
    return dt.toLocaleString()
}

知道问题所在了,那应该如何处理这个问题呢?

阅读 1.9k
3 个回答

因为js的Date对象对溢出时间进行了自己的处理。
今天是7月31日Month-1得到6月31日
但是6月没有31日,多出来的一天自动加上去就变成7月1日
你可以试下dt.setMonth(1)设置成二月,会发现结果是3月3日
或设置成超出本月最大日期的数字,比如dt.setDate(35) 结果是8月4日
都是因为这个自动处理算法的原因

一种逻辑处理, 7月31 分开 month 与 day, 你单独设置了 month-1, 之后31号会被计算为 6月31 => 7 月 1 日

大概是因为 6月没有 31号吧

推荐问题