如何从now.js正确添加1个月到当前日期

Jac*_*ovi 37 javascript date node.js momentjs

我阅读了moment.js的文档,如果你想从当前日期时间加1个月,你可以使用这段代码

var moment = require('moment');
var futureMonth = moment().add(1, 'M').format('DD-MM-YYYY');
Run Code Online (Sandbox Code Playgroud)

但是现在的问题是,它没有正确添加日期,例如假设当前日期是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 
Run Code Online (Sandbox Code Playgroud)

如果你看看当前的日历时间,31/10/2015假设是1个月1/12/2015

谁能给我一些关于如何解决这个问题的意见.

谢谢

sil*_*ntw 65

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);
Run Code Online (Sandbox Code Playgroud)

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());
Run Code Online (Sandbox Code Playgroud)

DEMO

  • 这只是另一种方式出错了 - 七月和八月都有 31 天。当您在 7 月 31 日加上一个月时,您将得到 9 月 1 日。 (4认同)

Ano*_*p M 17

根据最新文档,您可以执行以下操作:

加一天

moment().add(1, 'days').calendar();
Run Code Online (Sandbox Code Playgroud)

加年

moment().add(1, 'years').calendar();
Run Code Online (Sandbox Code Playgroud)

新增月份

moment().add(1, 'months').calendar();
Run Code Online (Sandbox Code Playgroud)

  • 这个答案是错误的,没有根据上面的要求正确添加一个月 (2认同)