Search code examples
pythondateweekday

Previous weekday in Python


In Python, given a date, how do I find the preceding weekday? (Weekdays are Mon to Fri. I don't care about holidays)


Solution

  • Simply subtract a day from the given date, then check if the date is a weekday. If not, subtract another, until you do have a weekday:

    from datetime import date, timedelta
    def prev_weekday(adate):
        adate -= timedelta(days=1)
        while adate.weekday() > 4: # Mon-Fri are 0-4
            adate -= timedelta(days=1)
        return adate
    

    Demo:

    >>> prev_weekday(date.today())
    datetime.date(2012, 8, 20)
    >>> prev_weekday(date(2012, 8, 20))
    datetime.date(2012, 8, 17)
    

    Alternatively, use an offset table; no need to make this a mapping, a tuple will do just fine:

    _offsets = (3, 1, 1, 1, 1, 1, 2)
    def prev_weekday(adate):
        return adate - timedelta(days=_offsets[adate.weekday()])