How to Add Months to a Date in JavaScript

avatar
Borislav Hadzhiev

Last updated: Mar 6, 2024
4 min

banner

# Add Months to a Date in JavaScript

To add months to a date:

  1. Use the getMonth() method to get a zero-based value for the month of the given date.
  2. Use the setMonth() method to set the month for the date.
  3. The setMonth method takes a zero-based integer for the month and sets the value for the date.
index.js
function addMonths(date, months) { date.setMonth(date.getMonth() + months); return date; } // โœ… Add 2 months to the current Date const result1 = addMonths(new Date(), 2); console.log(result1); // ๐Ÿ‘‰๏ธ 2023-09-27T07:17:09.816Z // ---------------------------------------------- // โœ… Add 4 months to a different date const date = new Date('2023-04-14T00:00:00.000Z'); const result2 = addMonths(date, 4); console.log(result2); // ๐Ÿ‘‰๏ธ 2023-08-14T00:00:00.000Z

add months to date

The code for this article is available on GitHub

The addMonths function takes a Date object and N as parameters and adds N months to the date.

If you need to add months to the current date, call the Date() constructor without passing it any arguments.

index.js
function addMonths(date, months) { date.setMonth(date.getMonth() + months); return date; } // โœ… Add 2 months to the current Date const currentDate = new Date(); const result1 = addMonths(currentDate, 2); console.log(result1); // ๐Ÿ‘‰๏ธ 2023-09-27T07:18:31.607Z

add months to current date

The code for this article is available on GitHub

The Date.getMonth() method returns an integer between 0 (January) and 11 (December), representing the month of the given date.

Note that the value is zero-based, e.g. January = 0, February = 1, March = 2, etc.

The setMonth() method takes a zero-based value representing the month of the year (0 = January, 1 = February, etc.) and sets the value for the date.

The JavaScript Date object automatically takes care of rolling over the year if adding X months to a date pushes us into the next year.

index.js
function addMonths(date, months) { date.setMonth(date.getMonth() + months); return date; } // โœ… Add 13 months to a date const date = new Date('2023-04-14T00:00:00.000Z'); const result = addMonths(date, 13); console.log(result); // ๐Ÿ‘‰๏ธ 2024-05-14T00:00:00.000Z

We added 13 months to the date, which pushed us into the next year and the Date object automatically took care of updating the year.

# Add months to a Date without mutation

Note that the setMonth method mutates the Date object it was called on.

If you don't want to change the Date in place, you can create a copy of it before calling the method.

index.js
function addMonths(date, months) { const dateCopy = new Date(date); dateCopy.setMonth(dateCopy.getMonth() + months); return dateCopy; } const date = new Date('2023-04-14T00:00:00.000Z'); const result = addMonths(date, 5); console.log(result); // ๐Ÿ‘‰๏ธ 2023-09-14T00:00:00.000Z console.log(date); // ๐Ÿ‘‰๏ธ 2023-04-14T00:00:00.000Z

add months to date without mutation

The code for this article is available on GitHub

When a Date object is passed to the Date() constructor, it gets converted to a timestamp and can be used to create a copy of the date.

Mutating function parameters is a bad practice because calling the function with the same parameter multiple times returns different results.

Instead, pure functions like the one above return the same output when called with the same parameters.

You might see the setMonth method used with 2 parameters. The parameters the method takes are:

  1. month - a zero-based (0 = January, 1 = February, etc) value for the month of the year.
  2. day of the month (optional) - an integer from 1 to 31 that represents the day of the month.

The day of the month parameter is optional, and when not specified, the value returned from the getDate() method is used.

# Add Months to a Date using date-fns

You can also use date-fns module to add months to a date.

index.js
import {addMonths} from 'date-fns'; const date = new Date('2023-04-14T00:00:00.000Z'); const result1 = addMonths(date, 1); console.log(result1); // ๐Ÿ‘‰๏ธ 2023-05-14T00:00:00.000Z const result2 = addMonths(date, 2); console.log(result2); // ๐Ÿ‘‰๏ธ 2023-06-14T00:00:00.000Z

add months to date using date fns

The code for this article is available on GitHub

The addMonths() function takes a date and the number of months to be added to the date as parameters.

The function doesn't mutate the original date as shown in the example.

If you don't have date-fns installed, you can install it by running the following command from your terminal.

shell
# ๐Ÿ‘‡๏ธ create package.json if you don't have one npm init -y # โœ… install with NPM npm install date-fns # โœ… install with YARN yarn add date-fns

# Add Months to a Date using moment.js

You can also use the moment.js module to add months to a date.

index.js
import moment from 'moment'; const date = new Date('2023-04-14T00:00:00.000Z'); const result1 = moment(date).add(1, 'months'); console.log(result1); // ๐Ÿ‘‰๏ธ 2023-05-14T00:00:00.000Z const result2 = moment(date).add(2, 'months'); console.log(result2); // ๐Ÿ‘‰๏ธ 2023-06-14T00:00:00.000Z console.log(date); // ๐Ÿ‘‰๏ธ 2023-04-14T00:00:00.000Z

add months to date using moment js

The code for this article is available on GitHub

We used the moment().add() method to add months to a date.

The method can be used to add years, quarters, months, weeks, days, hours, minutes, seconds or milliseconds to a date.

If you don't have moment installed, you can install it by running the following command from your terminal.

shell
# ๐Ÿ‘‡๏ธ create package.json if you don't have one npm init -y # โœ… install with NPM npm install moment # โœ… install with YARN yarn add moment

The call to the add() method actually returns a moment object and not a native JavaScript date.

If you need to convert the value to a JavaScript date, use the toDate() method.

index.js
import moment from 'moment'; const date = new Date('2023-04-14T00:00:00.000Z'); const result1 = moment(date).add(1, 'months').toDate(); console.log(result1); // ๐Ÿ‘‰๏ธ 2023-05-14T00:00:00.000Z const result2 = moment(date).add(2, 'months').toDate(); console.log(result2); // ๐Ÿ‘‰๏ธ 2023-06-14T00:00:00.000Z console.log(date); // ๐Ÿ‘‰๏ธ 2023-04-14T00:00:00.000Z
The code for this article is available on GitHub

The toDate() method takes care of converting the moment object to a native JavaScript Date object.

I've also written an article on how to subtract months from a Date.

# Additional Resources

You can learn more about the related topics by checking out the following tutorials:

I wrote a book in which I share everything I know about how to become a better, more efficient programmer.
book cover
You can use the search field on my Home Page to filter through all of my articles.

Copyright ยฉ 2024 Borislav Hadzhiev