Python - Exclude weekends between two Dates

Viewed 11024

I want to calculate the difference between the two dates but want to exclude the weekends from it . Below is the format of dates :

CreateDate  - 2017-08-29 10:47:00
ResolveDate - 2017-09-23 16:56:00
5 Answers

You can use numpy.busday_count:

from datetime import datetime
import numpy as np

create_date = "2017-08-29 10:47:00"
resolve_date = "2017-09-23 16:56:00"

create_datetime = datetime.strptime(create_date, '%Y-%m-%d %H:%M:%S')
resolve_datetime = datetime.strptime(resolve_date, '%Y-%m-%d %H:%M:%S')

print(f"The difference in days is: {(resolve_datetime - create_datetime).days}")
print(f"The difference in business days is: {np.busday_count(create_datetime.date(), resolve_datetime.date())}")

Output:

The difference in days is: 25
The difference in business days is: 19

Run a while loop that keeps adding a timedelta of +1 day to create_date. Keep track of weekday vs. weekend in a separate counter.

Same idea with weekday() but as a one-line function:

from datetime import datetime, timedelta


def get_business_days(start_date, end_date):
    return sum([
        (start_date + timedelta(days=i)).weekday() not in (5, 6)
        for i in range((end_date - start_date).days + 1)
    ])


create_date = "2017-08-29 10:47:00"
resolve_date = "2017-09-23 16:56:00"

s = datetime.strptime(create_date, '%Y-%m-%d %H:%M:%S')
e = datetime.strptime(resolve_date, '%Y-%m-%d %H:%M:%S')

print(get_business_days(s, e))

With datetime module:

import datetime

d1 = datetime.datetime.strptime('2017-08-29 10:47:00', '%Y-%m-%d %H:%M:%S')
d2 = datetime.datetime.strptime('2017-09-23 16:56:00', '%Y-%m-%d %H:%M:%S')
delta = (d2 - d1).days
diff_weekdays = delta - (delta // 7) * 2

print(diff_weekdays)    # 19
Related