Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to properly add 1 month from now to current date in moment.js

I read the documentation of moment.js that if you want to add 1 month from the current date time you use this code

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

But the problem right now, it is not properly add the date correctly, for example let say the current date is 31/10/2015, explain in 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  

if you take a look at the current calendar time, 1 month from 31/10/2015 supposed to be 1/12/2015

Could anyone give me some opinion on how to fix this problem.

Thank you

like image 514
Jack Moscovi Avatar asked Oct 30 '15 16:10

Jack Moscovi


People also ask

How do you add one day to a moment in a date?

This is a pretty robust function for adding time to an existing moment. To add time, pass the key of what time you want to add, and the amount you want to add. moment(). add(7, 'days');


1 Answers

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

EDIT

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

like image 53
silentw Avatar answered Sep 29 '22 13:09

silentw