Created
February 11, 2022 11:09
-
-
Save pasystem/90e24bc91445448b94663e6d19da26fa to your computer and use it in GitHub Desktop.
Counting business days between 2 dates
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import unittest | |
from datetime import datetime, timedelta | |
def business_days(start, end): | |
""" | |
Calculating business days between two dates excluding weekends | |
:param start: First date | |
:param end: Second date | |
:rtype: integer | |
""" | |
days = (end - start).days | |
(full_weeks, remaining_days) = divmod(days, 7) | |
business_days_count = full_weeks * 5 | |
if not remaining_days: | |
return business_days_count | |
full_weeks_dt = start + timedelta(days=full_weeks * 7) | |
max_weekday = full_weeks_dt.isoweekday() + remaining_days | |
if max_weekday > 7: | |
remaining_days -= 2 | |
elif max_weekday > 6: | |
remaining_days -= 1 | |
return business_days_count + remaining_days | |
class BusinessDaysTest(unittest.TestCase): | |
def test_full_weeks(self): | |
dates_results = ( | |
(datetime(2012, 7, 9), datetime(2012, 7, 16), 5), | |
(datetime(2012, 7, 3), datetime(2012, 7, 24), 15), | |
) | |
for date1, date2, expected in dates_results: | |
self.assertEqual(business_days(date1, date2), expected) | |
def test_partial_Weeks(self): | |
dates_results = ( | |
(datetime(2012, 7, 9), datetime(2012, 7, 14), 5), | |
(datetime(2012, 7, 3), datetime(2012, 7, 20), 13), | |
(datetime(2012, 6, 25), datetime(2012, 7, 11), 12), | |
) | |
for date1, date2, expected in dates_results: | |
self.assertEqual(business_days(date1, date2), expected) | |
if __name__ == '__main__': | |
unittest.main() | |
virhilo@sl500:~$ python buisness_timedelta.py | |
.. | |
---------------------------------------------------------------------- | |
Ran 2 tests in 0.000s | |
OK |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment