一尘不染

如何在moment.js中从现在开始正确地添加1个月到当前日期

node.js

我阅读了moment.js的文档,如果您想从当前日期开始增加1个月,请使用此代码

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

但是现在的问题是,它没有正确正确地添加日期,例如,假设当前日期为2015年10月31日,请在代码中说明

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

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

如果您查看当前的日历时间,则该时间31/10/2015应为1个月1/12/2015

谁能给我一些关于如何解决此问题的意见。

谢谢


阅读 231

收藏
2020-07-07

共1个答案

一尘不染

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**](http://jsbin.com/butuduhoti/edit?js,console)

编辑

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**](https://jsbin.com/deduyoroso/edit?js,console)

2020-07-07