Add Months to Date in Python

Hi everyone!

In this blog post, I’m going to show you how to use relativedelta from dateutil package to manipulate dates in Python. This is a very handy tool that allows you to add or subtract months, years, weeks, days and other units from a date object. Unlike datetime.timedelta, which only supports days and smaller units, relativedelta can handle more complex calculations that involve different lengths of months or leap years.

Let’s start with a simple example. Suppose you have a date object that represents December 14th, 2022:

from datetime import date
my_date = date(2022, 12, 14)

Now suppose you want to add two months to this date. Unfortunately datetime.timedelta does not allow to use months. However you can use relativedelta:

from datetime import date
from dateutil.relativedelta import relativedelta

Adding Months to a Particular Date

new_date = my_date + relativedelta(months=2)
If you print new_date, you will get:
>>> print(new_date)
>>> 2023-02-14

As you can see, relativedelta correctly added two months to the original date and returned a new date object. You can also subtract months or other units by using negative values:

Subtracting Months from a Particular Date

old_date = my_date - relativedelta(months=2)
>>> print(old_date)
>>> 2022-10-14

You can also combine multiple units in one relativedelta object:

Adding One Year and Three Days to a Particular Date

another_date = my_date + relativedelta(years=1, days=3)
>>> print(another_date)
>>> 2023-12-17

One of the cool features of relativedelta is that it can also replace specific components of a date object with absolute values. For example, if you want to change the day of a given date to 1 (the first day of the month), you can do this:

Replacing the Day Component with 1

first_day = my_date.replace(day=1)
>>> print(first_day)
>>> 2022-12-01

You can also use weekday parameter to set the weekday of a given date. For example, if you want to find the next Friday after a given date, you can do this:

Finding the Next Friday After a Given Date

from dateutil.relativedelta import FR # import weekday constants
next_friday = my_date + relativedelta(weekday=FR)
>>> print(next_friday)
>>> 2022-12-16

There are many more parameters and options that relativedelta supports. You can check out the documentation for more details: https://dateutil.readthedocs.io/en/stable/relativedelta.html


To contact me, send an email anytime or leave a comment below.