0
1

More than 3 years have passed since last update.

【Python3】定期券計算を使って「○年○月○日は何カ月前!」ってのを書いてみた

Last updated at Posted at 2021-02-04

1. 概要

Python3でいわゆる定期券計算とdatetimeを使って、何日前、とか何カ月前みたいなのを出してみた。

20210205083839_a5b294ec43bb5777c5a19f65eb448791.png
という事が稀に良く起きるので。あ、手書きで漢字を書く時も稀に良くある。
耄碌したかな…。

2. 動作サンプル

https://paiza.io/projects/_YmaBQlwVecdO9JDagJKvA

image.png

3. ソース

from datetime import datetime

def test(old_datetime):
    today_datetime = datetime.today().replace(hour=0,minute=0,second=0,microsecond=0)

    # 日数と週の扱い
    date_diff = (today_datetime - old_datetime).days
    week_diff = date_diff // 7

    # 月の扱い
    month_diff = (today_datetime.month - old_datetime.month) + (today_datetime.year - old_datetime.year) * 12
    if today_datetime.day - old_datetime.day < 0:
        month_diff -= 1

    # 年の扱い
    years_diff = month_diff // 12

    print(f'{old_datetime} は、{years_diff} 年前、{month_diff} カ月前、{week_diff} 週間前、{date_diff} 日前')


print(f'今日は {datetime.today()} です。')
test(datetime(2021, 2, 4))
test(datetime(2021, 2, 3))
test(datetime(2021, 2, 1))
test(datetime(2021, 1, 31))
test(datetime(2020, 12, 4))
test(datetime(2020, 2, 6))
test(datetime(2020, 2, 5))
test(datetime(2020, 2, 4))

4. 解説

4.1. 1日前について

【昨日】って何?って話。これは、0時を回ったらという判断にした。
厳密には24時間経過したらってなるけど、感覚としては寝て起きたら、寝る前の時間は昨日じゃん?
って事で、datetimeは00:00:00.000で丸めてある。

4.2. 1ヵ月前、1年前について

定期券計算の肝なんだけど、2021/02/01から見て2021/01/31は、1日前だけど、1ヵ月前じゃない
先月の同じ日付のプラス1 が1ヵ月経過していない境界になるわけだ。

今日 調べる日 判定
2021/02/05 2021/02/05 0年前、0ヵ月前、0日前
2021/02/04 0年前、0ヵ月前、1日前
2021/01/06 0年前、0ヵ月前、30日前
2021/01/05 0年前、1ヵ月前、31日前
2020/02/06 0年前、11ヵ月前、365日前
2020/02/05 1年前、12ヵ月前、366日前

4.3. 1週間について

これは単純に日数を7で割った商でいい。

5. あとがき

ああ、タイムゾーン入ってないなこれ…まあいいや。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1