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

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

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


当前回答

这个函数处理边缘情况,并且速度很快:

function addMonthsUTC (date, count) {
  if (date && count) {
    var m, d = (date = new Date(+date)).getUTCDate()

    date.setUTCMonth(date.getUTCMonth() + count, 1)
    m = date.getUTCMonth()
    date.setUTCDate(d)
    if (date.getUTCMonth() !== m) date.setUTCDate(0)
  }
  return date
}

测试:

> d = new Date('2016-01-31T00:00:00Z');
Sat Jan 30 2016 18:00:00 GMT-0600 (CST)
> d = addMonthsUTC(d, 1);
Sun Feb 28 2016 18:00:00 GMT-0600 (CST)
> d = addMonthsUTC(d, 1);
Mon Mar 28 2016 18:00:00 GMT-0600 (CST)
> d.toISOString()
"2016-03-29T00:00:00.000Z"

非utc日期更新:(由A.Hatchkins编写)

function addMonths (date, count) {
  if (date && count) {
    var m, d = (date = new Date(+date)).getDate()

    date.setMonth(date.getMonth() + count, 1)
    m = date.getMonth()
    date.setDate(d)
    if (date.getMonth() !== m) date.setDate(0)
  }
  return date
}

测试:

> d = new Date(2016,0,31);
Sun Jan 31 2016 00:00:00 GMT-0600 (CST)
> d = addMonths(d, 1);
Mon Feb 29 2016 00:00:00 GMT-0600 (CST)
> d = addMonths(d, 1);
Tue Mar 29 2016 00:00:00 GMT-0600 (CST)
> d.toISOString()
"2016-03-29T06:00:00.000Z"

其他回答

d = new Date();

alert(d.getMonth()+1);

月份有一个基于0的指数,它应该警报(4),这是5(五月);

容易的,简单的

function addMonths(date, months) {date.setMonth(date.getMonth() + months); return date;};

使用它作为

 alert(new Date().toLocaleString()); //will say today
 alert(addMonths(new Date(),12).toLocaleString()); //will say next year, same day and month

一个简单的答案可以是:

function addMonthsToDate(date, numMonths){
    // Add months
    date.setMonth(date.getMonth() + numMonths);
    
    // Zero the time component
    date.setHours(0, 0, 0, 0);
    return date;
}

这可以被称为-增加两个月:

console.log(addMonthsToDate(new Date(),2));

简单的解决方案: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)