如何在 Moment.js 中正确地将1个月添加到当前日期

我在 Moment.js 的文档中读到,如果你想把当前日期加上1个月,你可以使用以下代码:

var moment = require('moment');
var futureMonth = moment().add(1, 'M').format('DD-MM-YYYY');

但问题是,这并没有像我期望的那样增加。例如,假设当前日期是2015年10月31日(10月的最后一天)。代码:

var currentDate = moment().format('DD-MM-YYYY');
var futureMonth = moment().add(1, 'M').format('DD-MM-YYYY');


console.log(currentDate) //  Result --> 31/10/2015
console.log(futureMonth) //  Result --> 30/11/2015

如果你看一下日历,从2015年10月31日起的1个月31天应该是2015年12月1日(12月1日) ,而不是30/11/2015(11月的最后一天)。

有人能帮我解决这个问题吗?

195821 次浏览
var currentDate = moment('2015-10-30');
var futureMonth = moment(currentDate).add(1, 'M');
var futureMonthEnd = moment(futureMonth).endOf('month');


if(currentDate.date() != futureMonth.date() && futureMonth.isSame(futureMonthEnd.format('YYYY-MM-DD'))) {
futureMonth = futureMonth.add(1, 'd');
}


console.log(currentDate);
console.log(futureMonth);

DEMO

剪辑

moment.addRealMonth = function addRealMonth(d) {
var fm = moment(d).add(1, 'M');
var fmEnd = moment(fm).endOf('month');
return d.date() != fm.date() && fm.isSame(fmEnd.format('YYYY-MM-DD')) ? fm.add(1, 'd') : fm;
}


var nextMonth = moment.addRealMonth(moment());

DEMO

根据最新的 医生,你可以做到以下几点

再加一天

moment().add(1, 'days').calendar();

加上年份

moment().add(1, 'years').calendar();

加入月份

moment().add(1, 'months').calendar();

你可以试试

moment().add(1, 'M').subtract(1, 'day').format('DD-MM-YYYY')

startDate = "20.03.2020";
var newDate = moment(startDate, "DD-MM-YYYY").add(5, 'days');
console.log(newDate)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>