Given a date range how to calculate the number of weekends partially or wholly within that range?

Posted by andybak on Stack Overflow See other posts from Stack Overflow or by andybak
Published on 2009-05-19T15:58:57Z Indexed on 2010/05/12 1:04 UTC
Read the original article Hit count: 291

Filed under:
|
|
|

Given a date range how to calculate the number of weekends partially or wholly within that range?

(A few definitions as requested: take 'weekend' to mean Saturday and Sunday. The date range is inclusive i.e. the end date is part of the range 'wholly or partially' means that any part of the weekend falling within the date range means the whole weekend is counted.)

To simplify I imagine you only actually need to know the duration and what day of the week the initial day is...

I darn well now it's going to involve doing integer division by 7 and some logic to add 1 depending on the remainder but I can't quite work out what...

extra points for answers in Python ;-)

Edit

Here's my final code.

Weekends are Friday and Saturday (as we are counting nights stayed) and days are 0-indexed starting from Monday. I used onebyone's algorithm and Tom's code layout. Thanks a lot folks.

def calc_weekends(start_day, duration):
    days_until_weekend = [5, 4, 3, 2, 1, 1, 6]
    adjusted_duration = duration - days_until_weekend[start_day]
    if adjusted_duration < 0:
        weekends = 0
    else:
        weekends = (adjusted_duration/7)+1
    if start_day == 5 and duration % 7 == 0: #Saturday to Saturday is an exception
        weekends += 1
    return weekends

if __name__ == "__main__":
    days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    for start_day in range(0,7):
        for duration in range(1,16):
            print "%s to %s (%s days): %s weekends" % (days[start_day], days[(start_day+duration) % 7], duration, calc_weekends(start_day, duration))
        print

© Stack Overflow or respective owner

Related posts about date

Related posts about dates