Python: Get Number of Days Between Dates

Introduction

In this tutorial, we'll take a look at how to get the number of days between two dates in Python.

We'll be using the built-in datetime package, that allows you to really easily work with datetime objects in Python.

Creating a Datetime Object

As datetime is a built-in module, you can access it right away by importing it at the top of your Python file.

You can construct datetime objects in a few different ways:

from datetime import datetime

date_string = "1 January, 2021"

now = datetime.now() # Create Datetime based on system clock
dt1 = datetime(day=1, month=1, year=2021) # Create Datetime with given arguments
dt2 = datetime.strptime(date_string, "%d %B, %Y") # Create Datetime from String

There are certain rules to follow when it comes to Converting Strings to Datetime in Python.

Get Number of Days Between Dates in Python

Trying to measure the numbers of days between dates without using the datetime module is a deceptively complex task - between accounting for leap years and the number of days in each month, trying to create your own implementation is nonsensical.

With datetime however, it becomes trivial.

You can simply subtract a date or datetime from each other, to get the number of days between them:

from datetime import datetime

date1 = datetime.now()
date2 = datetime(day=1, month=7, year=2021)

timedelta = date2 - date1
print(timedelta)

This returns a timedelta object, which contains days, seconds and microseconds and represents the duration between any two date/time or datetime objects.

Printing this object will return the days, hours, minutes, seconds and microseconds to that event:

149 days, 5:22:52.255124

If you're not interested in some of these metrics, you can specify which of them you'd like to access with timedelta.days, timedelta.seconds and timedelta.microseconds:

now = datetime.now()
new_years = datetime(day=1, month=1, year=2022)
countdown = new_years - now

print('Today is: ', now)
print('New Year is on: ', new_years)
print('Days until New Years: ', countdown.days)

Here, we've assigned the days between now and new_years into countdown, which is a timedelta object.

Then, we can simply access the days parameter of that object to get the number of days between them. This results in:

Today is:  2021-02-01 18:35:12.272524
New Year is on:  2022-01-01 00:00:00
Days until New Years:  333

Adding and Subtracting Days Using TimeDelta

What if instead of trying to subtract two known dates from each other, you wanted to add or subtract a time-frame? For example, a customer subscribed to your service for a monthly fee. You'll want to remind them to renew it after a 30 days.

You can construct a time-frame for those 30 days, using timedelta and add or subtract that from any other datetime object:

from datetime import datetime, timedelta

now = datetime.now()
thirty_days = timedelta(days=30)

print('In 30 days: ', now + thirty_days)
print('30 days ago: ', now - thirty_days)

This results in:

In 30 days:  2021-03-03 18:41:49.922082
30 days ago:  2021-01-02 18:41:49.922082

This is an incredibly useful feature when trying to implement scheduling, or retrieving database entries based off a moving window (such as the trailing 30 days).

Conclusion

In this tutorial, we've covered everything you need to know about getting the number of days between two dates in Python.

We've worked with datetime objects and timedelta to achieve this functionality.

Author image
Ottawa, CA Twitter Website
Full Stack Developer and Technical Writer. I love writing about Python and React, and how anyone can create amazing products and tools.