diff --git a/workdays.py b/workdays.py new file mode 100644 index 0000000..cb0e71d --- /dev/null +++ b/workdays.py @@ -0,0 +1,63 @@ +import datetime as dt + +holidays = [ + "2017-01-01", "2017-05-29", "2017-07-04", "2017-09-04", "2017-11-24", + "2017-11-25", "2017-12-25", + "2018-01-01", "2018-05-28", "2018-07-04", "2018-09-03", "2018-11-22", + "2018-11-23", "2018-12-25", + "2019-01-01", "2019-05-27", "2019-07-04", "2019-09-02", "2019-11-28", + "2019-11-29", "2019-12-25", + "2020-01-01", "2020-05-25", "2020-07-03", "2020-09-07", "2020-11-26", + "2020-11-27", "2020-12-25", + "2020-12-31", "2021-05-31", "2021-07-05", "2021-09-06", "2021-11-25", + "2021-11-26", "2021-12-25", + "2021-12-31", "2022-05-30", "2022-07-04", "2022-09-05", "2022-11-24", + "2022-11-25", "2022-12-24", + "2023-01-02", "2023-05-29", "2023-07-04", "2023-09-04", "2023-11-22", + "2023-11-23", "2023-12-26", + "2024-01-01", "2024-05-27", "2024-07-04", "2024-09-02", "2024-11-28", + "2024-11-29", "2024-12-25", + "2025-01-01", "2025-05-26", "2025-07-04", "2025-09-01", "2025-11-27", + "2025-11-28", "2025-12-25", +] + + +def is_holiday(day): + return day.strftime('%Y-%m-%d') in holidays + + +def is_workday(day): + return (not is_holiday(day)) and day.weekday() < 5 + + +def not_workday(day): + return is_holiday(day) or day.weekday() > 4 + + +def start_day(day): + start = day + while True: + start -= dt.timedelta(days=1) + if is_workday(start) or start.weekday() == 5: + start += dt.timedelta(days=1) + return start + + +def end_day(day): + start = day + while True: + start += dt.timedelta(days=1) + if is_workday(start) or start.weekday() == 6: + start -= dt.timedelta(days=1) + return start + + +def get_date_range(date=''): + if date == '': + today = dt.datetime.now().date() + else: + today = dt.datetime.strptime(date, '%Y-%m-%d').date() + return [start_day(today), end_day(today)] + +if __name__ == "__main__": + pass