Calculating Date Boundaries in Python: Today, Yesterday, and Previous Day

This guide demonstrates how to retrieve the start and end timestamps for the current day, the previous day, and two days ago using Python's datetime module.

Retrieving Current Day Boundaries

from datetime import datetime, timedelta


class TimeRangeCalculator:
    """Utility class for calculating date range boundaries."""
    
    @staticmethod
    def current_day_range():
        """Returns today's start and end as datetime objects."""
        current = datetime.now()
        day_start = current.replace(hour=0, minute=0, second=0, microsecond=0)
        day_end = day_start + timedelta(days=1) - timedelta(seconds=1)
        return day_start, day_end
    
    @staticmethod
    def current_day_range_formatted():
        """Returns today's start and end as formatted strings."""
        current = datetime.now()
        day_start = current.strftime("%Y-%m-%d 00:00:00")
        day_end = current.strftime("%Y-%m-%d 23:59:59")
        return day_start, day_end

Retrieving Previous Day Boundaries

from datetime import datetime, timedelta


class TimeRangeCalculator:
    
    @staticmethod
    def previous_day_range():
        """Returns yesterday's start and end as datetime objects."""
        prior = datetime.now() - timedelta(days=1)
        day_start = prior.replace(hour=0, minute=0, second=0, microsecond=0)
        day_end = day_start + timedelta(days=1) - timedelta(seconds=1)
        return day_start, day_end
    
    @staticmethod
    def previous_day_range_formatted():
        """Returns yesterday's start and end as formatted strings."""
        prior = datetime.now() - timedelta(days=1)
        day_start = prior.strftime("%Y-%m-%d 00:00:00")
        day_end = prior.strftime("%Y-%m-%d 23:59:59")
        return day_start, day_end

Rterieving Two Days Ago

To obtain boundaries for the day before yesterday, subtract one additional day from yesterday's range:

yesterday_range = TimeRangeCalculator.previous_day_range()
two_days_ago_start = yesterday_range[0] - timedelta(days=1)
two_days_ago_end = yesterday_range[1] - timedelta(days=1)

Compleet Implementation Example

from datetime import datetime, timedelta


class TimeRangeCalculator:
    """Handles date range calculations for common time periods."""
    
    @staticmethod
    def current_day_range():
        """Returns today's start and end as datetime objects."""
        current = datetime.now()
        day_start = current.replace(hour=0, minute=0, second=0, microsecond=0)
        day_end = day_start + timedelta(days=1) - timedelta(seconds=1)
        return day_start, day_end
    
    @staticmethod
    def current_day_range_formatted():
        """Returns today's start and end as formatted strings."""
        current = datetime.now()
        day_start = current.strftime("%Y-%m-%d 00:00:00")
        day_end = current.strftime("%Y-%m-%d 23:59:59")
        return day_start, day_end
    
    @staticmethod
    def previous_day_range():
        """Returns yesterday's start and end as datetime objects."""
        prior = datetime.now() - timedelta(days=1)
        day_start = prior.replace(hour=0, minute=0, second=0, microsecond=0)
        day_end = day_start + timedelta(days=1) - timedelta(seconds=1)
        return day_start, day_end
    
    @staticmethod
    def previous_day_range_formatted():
        """Returns yesterday's start and end as formatted strings."""
        prior = datetime.now() - timedelta(days=1)
        day_start = prior.strftime("%Y-%m-%d 00:00:00")
        day_end = prior.strftime("%Y-%m-%d 23:59:59")
        return day_start, day_end


if __name__ == '__main':
    # Current day boundaries
    today_dt = TimeRangeCalculator.current_day_range()
    today_str = TimeRangeCalculator.current_day_range_formatted()
    
    # Previous day boundaries
    yesterday_dt = TimeRangeCalculator.previous_day_range()
    yesterday_str = TimeRangeCalculator.previous_day_range_formatted()
    
    # Two days ago boundaries
    two_days_ago_start = yesterday_dt[0] - timedelta(days=1)
    two_days_ago_end = yesterday_dt[1] - timedelta(days=1)
    
    print(f"Today's start (datetime): {today_dt[0]}")
    print(f"Today's end (datetime): {today_dt[1]}")
    print(f"Today's start (string): {today_str[0]}")
    print(f"Today's end (string): {today_str[1]}")
    print(f"Yesterday's start (datetime): {yesterday_dt[0]}")
    print(f"Yesterday's end (datetime): {yesterday_dt[1]}")
    print(f"Yesterday's start (string): {yesterday_str[0]}")
    print(f"Yesterday's end (string): {yesterday_str[1]}")
    print(f"Two days ago start: {two_days_ago_start}")
    print(f"Two days ago end: {two_days_ago_end}")

The key technique involves using replace() to set time components to midnight for the start, then adding one day and subtracting one second to get the precise end timestamp.

Tags: python datetime time manipulation programming

Posted on Mon, 11 May 2026 03:37:08 +0000 by SulleyMonstersInc