Karan Khanna
Karan Khanna

Reputation: 117

Python - Exclude weekends between two Dates

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

Upvotes: 7

Views: 16546

Answers (5)

Yann
Yann

Reputation: 2522

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))

Upvotes: 0

Sash Sinha
Sash Sinha

Reputation: 22350

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

Upvotes: 7

Vikas
Vikas

Reputation: 41

One more python way using isoweekday():

import datetime, pprint

# isoweekday: Monday is 1 and Sunday is 7
start_date = datetime.date(2017, 10, 1)
end_date = datetime.date(2017, 12, 31)
days = end_date - start_date
valid_date_list = {(start_date + datetime.timedelta(days=x)).strftime('%d-%b-%Y')
                        for x in range(days.days+1)
                        if (start_date + datetime.timedelta(days=x)).isoweekday() <= 5
                       }
print("Business Days = {}".format(len(valid_date_list)))

Upvotes: 4

RomanPerekhrest
RomanPerekhrest

Reputation: 92854

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

Upvotes: -1

J_H
J_H

Reputation: 20435

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.

Upvotes: 2

Related Questions