JavaScript function to add X months to a date
The following function adds months to a date in JavaScript (source). It takes into account year roll-overs and varying month lengths:
function addMonths(date, months) {
var d = date.getDate();
date.setMonth(date.getMonth() + +months);
if (date.getDate() != d) {
date.setDate(0);
}
return date;
}
// Add 12 months to 29 Feb 2016 -> 28 Feb 2017
console.log(addMonths(new Date(2016,1,29),12).toString());
// Subtract 1 month from 1 Jan 2017 -> 1 Dec 2016
console.log(addMonths(new Date(2017,0,1),-1).toString());
// Subtract 2 months from 31 Jan 2017 -> 30 Nov 2016
console.log(addMonths(new Date(2017,0,31),-2).toString());
// Add 2 months to 31 Dec 2016 -> 28 Feb 2017
console.log(addMonths(new Date(2016,11,31),2).toString());
How to add months to a date in JavaScript?
Corrected as of 25.06.2019:
var newDate = new Date(date.setMonth(date.getMonth()+8));
Old
From here:
var jan312009 = new Date(2009, 0, 31);
var eightMonthsFromJan312009 = jan312009.setMonth(jan312009.getMonth()+8);
Adding months to a Date in JavaScript
You need to get business rules for adding months. The simple solution is:
function addMonths(dateObj, num) {
return dateObj.setMonth(dateObj.getMonth() + num);
}
However, that will change 31 July to 31 September, which will be converted to 1 October. Also, 31 January plus 1 month is 31 February which will be converted to 2 or 3 March depending on whether it's a leap year or not.
You might expect the first to be 30 September and the second to be 28 or 29 February (depending on whether it's a leap year or not).
So if you want "end of months" be observed, you need to do something like:
function addMonths(dateObj, num) {
var currentMonth = dateObj.getMonth() + dateObj.getFullYear() * 12;
dateObj.setMonth(dateObj.getMonth() + num);
var diff = dateObj.getMonth() + dateObj.getFullYear() * 12 - currentMonth;
// If don't get the right number, set date to
// last day of previous month
if (diff != num) {
dateObj.setDate(0);
}
return dateObj;
}
But check with whoever is responsible for the business rules that that is what they want.
Edit
The above works well, but in response to McShaman's comment here is a version with a simpler check for the month roll–over:
function addMonths(date, months) {
var d = date.getDate();
date.setMonth(date.getMonth() + +months);
if (date.getDate() != d) {
date.setDate(0);
}
return date;
}
// Add 12 months to 29 Feb 2016 -> 28 Feb 2017
console.log(addMonths(new Date(2016,1,29),12).toString());
// Subtract 1 month from 1 Jan 2017 -> 1 Dec 2016
console.log(addMonths(new Date(2017,0,1),-1).toString());
// Subtract 2 months from 31 Jan 2017 -> 30 Nov 2016
console.log(addMonths(new Date(2017,0,31),-2).toString());
// Add 2 months to 31 Dec 2016 -> 28 Feb 2017
console.log(addMonths(new Date(2016,11,31),2).toString());
How to properly add 1 month from now to current date in moment.js
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
how do i add x number of months to current date in angular2
Use setMonth() method in javascript
export class AppComponent {
name = 'Angular 5';
send_date=new Date();
formattedDate : any;
constructor(){
this.send_date.setMonth(this.send_date.getMonth()+8);
this.formattedDate=this.send_date.toISOString().slice(0,10);
console.log(this.formattedDate);
}
}
How do I calculate the date in JavaScript three months prior to today?
var d = new Date();
d.setMonth(d.getMonth() - 3);
This works for January. Run this snippet:
var d = new Date("January 14, 2012");
console.log(d.toLocaleDateString());
d.setMonth(d.getMonth() - 3);
console.log(d.toLocaleDateString());
Related Topics
How to Check If File Exists in Jquery or Pure JavaScript
Generate a Hash from String in JavaScript
JavaScript and Operator Within Assignment
Read :Hover Pseudo Class with JavaScript
Google Seo and Hidden Elements
Why Is Element Not Being Shown Before Alert
Viable Options for Running Nodejs on Android (Aug 2017)
Why Doesn't Indexof Work on an Array IE8
If a Dom Element Is Removed, Are Its Listeners Also Removed from Memory
Why Does Chrome Debugger Think Closed Local Variable Is Undefined
How to Remove Item from Array by Value
Difference Between Variable Declaration Syntaxes in JavaScript (Including Global Variables)
Meaning of "This" in Node.Js Modules and Functions
Black and White Text Based on Background Image with CSS
How to Make Jquery UI Tabs Scroll Horizontally If There Are Too Many Tabs
Add a Transform Value to the Current Transforms That Are Already on the Element