土日祝を考慮した日付判定ロジック
「本来はその月の16日以外はNGだけど、16日が土日祝の場合以降最初の平日ならOK」
という処理を色々かんがえて書いてみたのですが、もっとスッキリわかりやすく書ける気がしています。
よろしければアドバイスをいただけないでしょうか…?
(17日以降の場合だけ切り出しているのでjoining_dateに16日以前は入らないものとしてください…)
import datetime
from dateutil.relativedelta import relativedelta
import jpholiday
def is_head_of_month(joining_date, head_of_month):
for n in range(1,5):
next_day = head_of_month + relativedelta(days=n)
if next_day.day == joining_date.day - 1:
if next_day.weekday() == 5 or next_day.weekday() == 6 or jpholiday.is_holiday(next_day):
return True
else:
return False
else:
return False
join=datetime.date(2023, 9, 19)
head = datetime.date(2023, 9, 16)
if is_head_of_month(join, head):
print("月度頭")
else:
print("月度頭じゃない")
# → 月度頭
0