Python

【Python】特定の日付から週単位で日付を取得する(月曜スタート、日曜スタート対応)

記事内に商品プロモーションを含む場合があります

このページでわかること

Pythonにて、月曜スタート、日曜スタートで「今週の開始日と終了日」を取得できる関数を公開します。

こんにちは、hokkyokunです。

Pythonにて日付から今週のはじめと終わりの日付を取得する関数を作ったので公開します。

意識した点は

  • 関数として作るので、コピペですぐに使える
  • 月曜スタートと日曜スタートどちらにも対応できる

weekdayメソッド

datetimeモジュールのweekdayメソッドを使用します。

datetimeモジュールは標準ライブラリなので、通常であれば、別途インストールする必要はないはずです。

使ってみます。

import datetime

# weekday()で曜日を数値で取得(月曜日:0、日曜日:6)
date_=datetime.date(2022,5,1)
date_.weekday()
##6

基本戦略はweekdayメソッドで特定の日付の曜日を出し
そこから何日さかのぼれば、月曜(もしくは日曜)になるのか計算。⇒開始日
さらにそこから6日後を終了日として計算します。

コード

## 第一引数に特定の日付をdate型、もしくはdatetime型で記入
## 第二引数に開始させたい曜日を"Sunday" もしくは "Monday"で記入
## "Sunday","Monday"以外は入力を受け付けない。
## 戻り値はタプルで("開始日","終了日")を返す。
## 戻り値のデータ型は第一引数と同じ
def get_thisweek(date_,start_weekday):
    date_weekday=date_.weekday()
    if start_weekday=="Sunday":
        dif_date=0 if date_weekday==6 else date_weekday+1
    elif start_weekday=="Monday":
        dif_date=date_weekday
    else:
        print("Sunday , Monday 以外が指定されています。再度入力してください。")
        return
    start_day=date_-datetime.timedelta(days=dif_date)
    last_day=start_day+datetime.timedelta(days=6)
    return start_day,last_day

実際に使用してみます。

get_thisweek(datetime.date(2022,5,27),"Sunday")
## >> (datetime.date(2022, 5, 22), datetime.date(2022, 5, 28))

get_thisweek(datetime.date(2022,5,27),"Monday")
## >> (datetime.date(2022, 5, 23), datetime.date(2022, 5, 29))

get_thisweek(datetime.date(2022,5,27),"Tuesday")
## >> Sunday , Monday 以外が指定されています。再度入力してください。