我正在寻找最简单、最干净的方法将X个月添加到JavaScript日期中。

我宁愿不处理一年的滚动,也不愿意自己写函数。

有什么内置的东西可以做到这一点吗?


当前回答

这适用于所有的边缘情况。newMonth的奇怪计算处理负月份输入。如果新的月份与预期的月份不匹配(比如31 Feb),它会将月份的日期设置为0,这意味着“上个月的结束”:

function dateAddCalendarMonths(date, months) {
    monthSum = date.getMonth() + months;
    newMonth = (12 + (monthSum % 12)) % 12;
    newYear = date.getFullYear() + Math.floor(monthSum / 12);
    newDate = new Date(newYear, newMonth, date.getDate());
    return (newDate.getMonth() != newMonth)
        ? new Date(newDate.setDate(0))
        : newDate;
}

其他回答

有时有用的创建日期由一个操作符,如在BIRT参数

我在1个月前用:

new Date(new Date().setMonth(new Date().getMonth()-1));   

简单的解决方案:2678400000是31天,单位为毫秒

var oneMonthFromNow = new Date((+new Date) + 2678400000);

更新:

使用这些数据来构建我们自己的函数:

2678400000 - 31天 2592000000 - 30天 2505600000 - 29天 2419200000 - 28天

我已经通过使用Moment Js库完成了 参考文献:https://momentjs.com/

   startDate = new Date()
   endDate = moment(startDate).add(2, "Months").format("YYYY-MM-DD")
   endDate= new Date (endDate)

我改变了一点接受的答案,以保持原始日期完整,因为我认为它应该在这样的函数中。

函数添加月份(日期,月份) { 让新日期 = 新日期(日期); var day = newdate.getDate(); newDate.setMonth(newDate.getMonth() + +months); if (newDate.getDate() != day) newDate.setDate(0); 返回新日期; }

var a=new Date();
a.setDate(a.getDate()+5);

如上所述的方法,您可以添加月到日期功能。