Iterating through a range of dates in Python

Iterating through a range of dates is a common task in Python applications. Python's datetime module provides several functions like date(), timedelta(), and built-in functions like range() to accomplish this efficiently.

For example, if we want to iterate from 2023-06-26 to 2023-06-30, we would get:

  • 2023-06-26
  • 2023-06-27
  • 2023-06-28
  • 2023-06-29
  • 2023-06-30

Key Functions

datetime.date() Creates date objects representing calendar dates.

timedelta() Represents a duration, the difference between two dates or times.

range() Built-in function that generates a sequence of numbers.

Using While Loop

The while loop approach iterates day by day from start to end date ?

import datetime

start = datetime.date(2023, 6, 3)
end = datetime.date(2023, 6, 6)
current_date = start

print("The range dates are:")
while current_date <= end:
    print(current_date)
    current_date += datetime.timedelta(days=1)
The range dates are:
2023-06-03
2023-06-04
2023-06-05
2023-06-06

Using List Comprehension

List comprehension provides a concise way to generate all dates in the range ?

import datetime

start = datetime.date(2023, 6, 16)
end = datetime.date(2023, 6, 19)

date_range = [start + datetime.timedelta(days=delta) 
              for delta in range((end - start).days + 1)]

print("The range dates are:")
for date in date_range:
    print(date)
The range dates are:
2023-06-16
2023-06-17
2023-06-18
2023-06-19

Using For Loop with Range

This method uses range() to calculate the number of days and iterate ?

import datetime

start = datetime.date(2023, 6, 1)
end = datetime.date(2023, 6, 5)

print("The range of dates:")
for delta in range((end - start).days + 1):
    current_date = start + datetime.timedelta(days=delta)
    print(current_date)
The range of dates:
2023-06-01
2023-06-02
2023-06-03
2023-06-04
2023-06-05

Using Generator Function for Custom Intervals

A generator function allows custom step intervals, like every 2 days ?

import datetime

def date_range_generator(start, end, step=1):
    current_date = start
    while current_date <= end:
        yield current_date
        current_date += datetime.timedelta(days=step)

start_date = datetime.date(2023, 6, 10)
end_date = datetime.date(2023, 6, 20)

print("Every 2 days in range:")
for date in date_range_generator(start_date, end_date, 2):
    print(date)
Every 2 days in range:
2023-06-10
2023-06-12
2023-06-14
2023-06-16
2023-06-18
2023-06-20

Comparison

Method Memory Usage Best For
While Loop Low Simple iteration
List Comprehension High Small ranges, need list
For Loop + Range Low Readable code
Generator Very Low Large ranges, custom steps

Conclusion

Use generators for memory-efficient iteration over large date ranges. List comprehension works well for smaller ranges when you need a complete list. The while loop and for loop methods provide clear, readable solutions for most date iteration tasks.

Updated on: 2026-03-27T12:19:14+05:30

8K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements