How to get all dates between 2 dates in Python

1 Answer

0 votes
from datetime import date, timedelta
from typing import List

def get_dates_between(start_date_str: str, end_date_str: str) -> List[str]:
    """
    Generates all dates between start_date and end_date inclusive.
    Uses Python's built-in datetime module for robust calendar-aware date math.
    
    Args:
        start_date_str: Start date in "YYYY-MM-DD" format.
        end_date_str: End date in "YYYY-MM-DD" format.
        
    Returns:
        A list of date strings in "YYYY-MM-DD" format.
    """
    try:
        # 1. Parse input strings into type-safe date objects using ISO 8601 parsing.
        # This automatically validates calendar correctness (e.g., rejects Feb 31).
        start_date = date.fromisoformat(start_date_str)
        end_date = date.fromisoformat(end_date_str)
    except ValueError as e:
        raise ValueError(f"Invalid date format or illegal calendar date. Use YYYY-MM-DD. Details: {e}")

    # 2. Validate that the date range is logically sound
    if start_date > end_date:
        raise ValueError("Start date cannot be after the end date.")

    dates = []
    current_date = start_date

    # 3. Iterate day-by-day safely using timedelta
    # timedelta(days=1) correctly handles month changes, leap years, and year rollovers.
    while current_date <= end_date:
        dates.append(current_date.isoformat())
        current_date += timedelta(days=1)

    return dates

# --- Example Usage ---
if __name__ == "__main__":
    start = "2026-02-26"
    end = "2026-03-02"

    try:
        date_list = get_dates_between(start, end)
        print(f"Dates between {start} and {end}:")
        for d in date_list:
            print(d)
    except ValueError as err:
        print(f"Error: {err}")


'''
run:

Dates between 2026-02-26 and 2026-03-02:
2026-02-26
2026-02-27
2026-02-28
2026-03-01
2026-03-02

'''

 



answered 4 days ago by avibootz
...