Python|翌週・先週の月曜日の日付を取得する

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.datedatetime.datetimeは似ていますが別物です。加減算や比較時にエラーにならないよう、型を明示的に揃えるとよいでしょう。

 

6. まとめ

今回はPythonで「翌週・先週の月曜日の日付を取得する」方法について解説しました。datetimetimedeltaを使えば、曜日ベースの日付操作も簡単に行えます。

  • weekday()で曜日を取得
  • 加算・減算にはtimedeltaを使用
  • 実務で役立つ週次処理の自動化にも活用可能

この知識は、日付処理の自動化やスケジューリング処理を組む際に非常に有用です。ぜひ自分のプロジェクトでも活用してみてください。

📌 学習のコツ:まずは「今日が何曜日か?」を調べるだけでも、コードの挙動が見えてきます。日付を固定してテストすると、理解がより深まります。

タイトルとURLをコピーしました