【Django】DateTime型の日付を特定の日付と比較して条件分岐する方法

例えばとある処理が行われてから丸1日以上間隔が空いている場合はOKだけど1日未満の場合はNG、のような感じで処理で分けたい時なんかに使えます。

SNS機能を持ったアプリで通知を作成するか否かの判定などに使うといいかんじのやつです。

コード

まずは条件分岐に必要な素材を書き出してみます。

postはDateTime型のフィールド(created_at)を持つインスタンスで、post.created_atにはpostが作成された日付が格納されているとします。

# インポート必須
from datetime import datetime, timedelta
from django.utils import timezone

# 比較対象のDateTime
print(post.created_at)
# 結果:2018-07-06 19:36:52.949309+00:00

# 現在日時
print(timezone.now())
# 結果:2018-07-06 19:38:56.865944+00:00

# 現在日時 - 1日
print(timezone.now() - timedelta(days=1))
# 結果:2018-07-05 19:38:56.865964+00:00

あとはこれらを使って条件文を書くだけ!

例えば現在時刻がpostが作成されてから1日未満ならスキップ、1日以上ならスキップせずに何らかの処理を行いたい場合は以下のようになります。

# 現在日時がpostが作成されてから1日(24時間)未満の場合はスキップする
if post.created_at > (timezone.now() - timedelta(days=1)):
  print('スキップするよ!')
else:
  print('スキップしないよ!なんらかの処理を行うよ!')

1日を2日、3日と変えたい、あるいは単位を変えたい等の場合は「timedelta(day=1)」の部分を変更すればOKですね。

参考記事

Django 日時フィールドの比較を行う

Pythonのdatetimeで日付の範囲を比較演算子で指定する – Qiita

よかったらシェアしてね!
  • URLをコピーしました!