web-dev-qa-db-fra.com

Comment ajouter correctement 1 mois à compter de la date actuelle dans moment.js

J'ai lu la documentation de moment.js que si vous voulez ajouter 1 mois à compter de la date actuelle, utilisez ce code

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

Mais le problème à l'heure actuelle, il ne s'agit pas d'ajouter correctement la date, par exemple, la date du 31/10/2015 est expliquée dans le code

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 

si vous regardez le calendrier actuel, 1 mois à partir de 31/10/2015 censé être 1/12/2015

Quelqu'un pourrait-il me donner un avis sur la façon de résoudre ce problème?.

Merci

30
Jack Moscovi
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

[~ # ~] éditer [~ # ~]

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

57
silentw

Selon le dernier doc vous pouvez faire ce qui suit-

Ajouter un jour

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

Ajouter l'année

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

Ajouter un mois

moment().add(1, 'months').calendar();
15
Anoop M