Python で日付が「今月」「今週」「今日」かを判定する
「この日付は今日か?」「今週中か?」「今月か?」といった判定は、フィルタリングや表示切り替えでよく使います。Python での実装方法をパターン別に見ていきましょう。
今日かどうかを判定する
date.today() と比較するのが最もシンプルです。
from datetime import date, datetime
today = date.today()
target_date = date(2025, 1, 15)
if target_date == today:
print("今日です")
else:
print("今日ではありません")
datetime オブジェクトの場合は、date() メソッドで日付部分を取り出して比較します。
from datetime import date, datetime
today = date.today()
target_dt = datetime(2025, 1, 15, 14, 30, 0)
if target_dt.date() == today:
print("今日です")
時刻の違いを無視して日付だけで判定したいときに使うパターンです。
今週かどうかを判定する
「今週」の定義は用途によって異なりますが、月曜始まりの週で判定する例を示します。
from datetime import date, timedelta
def get_week_range(d):
"""指定日を含む週の月曜と日曜を返す"""
monday = d - timedelta(days=d.weekday())
sunday = monday + timedelta(days=6)
return monday, sunday
today = date.today()
monday, sunday = get_week_range(today)
target = date(2025, 1, 15)
if monday <= target <= sunday:
print("今週です")
else:
print("今週ではありません")
weekday() は月曜が 0、日曜が 6 を返すため、当日から weekday() 日分を引けば週の月曜日が得られます。
今月かどうかを判定する
年と月が一致するかを確認します。
from datetime import date
today = date.today()
target = date(2025, 1, 15)
if target.year == today.year and target.month == today.month:
print("今月です")
else:
print("今月ではありません")
もう少し汎用的に、月の範囲を取得する関数を作ることもできます。
from datetime import date
import calendar
def get_month_range(d):
"""指定日を含む月の初日と末日を返す"""
first_day = d.replace(day=1)
last_day_num = calendar.monthrange(d.year, d.month)[1]
last_day = d.replace(day=last_day_num)
return first_day, last_day
today = date.today()
first, last = get_month_range(today)
print(f"今月: {first} 〜 {last}")
calendar.monthrange() は指定月の日数を返してくれるので、末日の取得に便利です。
判定関数をまとめる
よく使う判定をユーティリティ関数としてまとめておくと再利用しやすくなります。
from datetime import date, timedelta
import calendar
def is_today(d):
return d == date.today()
def is_this_week(d):
today = date.today()
monday = today - timedelta(days=today.weekday())
sunday = monday + timedelta(days=6)
return monday <= d <= sunday
def is_this_month(d):
today = date.today()
return d.year == today.year and d.month == today.month
# 使用例
target = date(2025, 1, 15)
print(f"今日?: {is_today(target)}")
print(f"今週?: {is_this_week(target)}")
print(f"今月?: {is_this_month(target)}")
日曜始まりにしたい場合
ISO 標準では月曜始まりですが、日曜始まりで週を扱いたい場合もあります。
from datetime import date, timedelta
def get_week_range_sunday_start(d):
"""日曜始まりの週範囲を返す"""
# weekday(): 月=0, 日=6 なので、日曜始まりなら +1 して 7 で割る
days_since_sunday = (d.weekday() + 1) % 7
sunday = d - timedelta(days=days_since_sunday)
saturday = sunday + timedelta(days=6)
return sunday, saturday
today = date.today()
sunday, saturday = get_week_range_sunday_start(today)
print(f"今週(日曜始まり): {sunday} 〜 {saturday}")
業務要件に合わせて週の開始日を調整してください。