1. はじめに
Pythonで日付操作を行う際、「翌週の月曜日」や「先週の月曜日」のような特定の曜日の日付を取得したい場面は多々あります。例えば、週次レポートの集計開始日を求めたいときや、スケジューラーの基準日として使用したいときなどです。
本記事では、Pythonで翌週および先週の月曜日の日付を取得する方法について、初心者にもわかりやすく解説します。datetime
モジュールを活用し、曜日の調整に便利なtimedelta
との組み合わせも紹介します。
実際のコード例と実行結果も交えながら、応用的な活用方法や注意点も丁寧に解説しますので、ぜひ最後までご覧ください。
2. Pythonで曜日を操作する基本:datetimeとtimedelta
2-1. datetimeモジュールとは?
Pythonで日付や時間を扱う際に使う代表的なモジュールがdatetime
です。日付の取得・加算・減算・フォーマットなど、多くの処理が可能です。
2-2. 曜日を取得する:weekday()
datetime.date.today()
などで得た日付から、weekday()
メソッドを使えば、曜日を数値(0〜6)で取得できます。月曜日は0、日曜日は6です。
from datetime import date
# 今日の日付
today = date.today()
# 曜日を取得(0が月曜日)
weekday = today.weekday()
print("今日は何曜日? →", weekday)
実行結果:
今日は何曜日? → 2 # 例:水曜日の場合(0=月, 1=火, ..., 6=日)
2-3. 日付の加減算:timedelta
datetime.timedelta
を使うことで、日数単位の加減算ができます。
from datetime import timedelta
# 今日から3日後
three_days_later = today + timedelta(days=3)
# 昨日
yesterday = today - timedelta(days=1)
3. Pythonで翌週・先週の月曜日を取得する方法
3-1. 翌週の月曜日を取得
現在の曜日(0〜6)から、次の月曜日まで何日あるかを計算して取得します。
from datetime import date, timedelta
def get_next_monday(today=None):
if today is None:
today = date.today()
weekday = today.weekday()
# 次の月曜日までの日数(例:今日が水曜(2)なら5日後)
days_until_next_monday = (7 - weekday) % 7
days_until_next_monday = 7 if days_until_next_monday == 0 else days_until_next_monday
return today + timedelta(days=days_until_next_monday)
# 実行
next_monday = get_next_monday()
print("翌週の月曜日:", next_monday)
実行結果:
翌週の月曜日: 2025-07-28
3-2. 先週の月曜日を取得
現在の曜日から過去の日数を引いて、1週前の月曜日を取得します。
def get_previous_monday(today=None):
if today is None:
today = date.today()
weekday = today.weekday()
# 現在の曜日から7日+曜日分を引く
return today - timedelta(days=weekday + 7)
# 実行
previous_monday = get_previous_monday()
print("先週の月曜日:", previous_monday)
実行結果:
先週の月曜日: 2025-07-14
3-3. 今日が月曜日だった場合の挙動
どちらの関数も、今日が月曜日でも必ず「翌週」や「先週」を返します。
4. よくある使い方・応用例
4-1. 週次レポートの開始日を自動取得
業務で週次レポートを作成する際に、「先週の月曜日〜日曜日」の期間を自動計算できます。
def get_last_week_range(today=None):
if today is None:
today = date.today()
monday = get_previous_monday(today)
sunday = monday + timedelta(days=6)
return monday, sunday
start_date, end_date = get_last_week_range()
print(f"先週のレポート期間:{start_date} ~ {end_date}")
実行結果:
先週のレポート期間:2025-07-14 ~ 2025-07-20
4-2. 月曜日を起点とした処理スケジューリング
自動処理やスケジューラーにおいて、「月曜日起動」を基準とした条件判定にも応用可能です。
5. 注意点・エラー対策
5-1. weekday()は月曜が0、日曜が6
weekday()
とisoweekday()
の違いに注意してください。isoweekday()
は月曜が1、日曜が7です。今回の記事ではweekday()
を使っているため、0〜6に注意しましょう。
5-2. 実行日によって結果が変わる
date.today()
は毎日変わるため、同じコードでも別の日に実行すると異なる結果になります。再現性が必要な場面では、固定日付を渡すのが安全です。
5-3. 型の取り扱いに注意
datetime.date
とdatetime.datetime
は似ていますが別物です。加減算や比較時にエラーにならないよう、型を明示的に揃えるとよいでしょう。
6. まとめ
今回はPythonで「翌週・先週の月曜日の日付を取得する」方法について解説しました。datetime
とtimedelta
を使えば、曜日ベースの日付操作も簡単に行えます。
weekday()
で曜日を取得- 加算・減算には
timedelta
を使用 - 実務で役立つ週次処理の自動化にも活用可能
この知識は、日付処理の自動化やスケジューリング処理を組む際に非常に有用です。ぜひ自分のプロジェクトでも活用してみてください。
📌 学習のコツ:まずは「今日が何曜日か?」を調べるだけでも、コードの挙動が見えてきます。日付を固定してテストすると、理解がより深まります。