Rails: イベント開始/終了日時のクエリー

目的
イベント開始日時の1時間後など日時クエリーの覚書を残します。

環境
macOS 10.15.6
Ruby 2.7.1
Rails 6.0.3.2

対象のモデル

画像1

bin/rails g model Event start_at:datetime end_at:datetime

以後

開始日時の1時間前以後(開始1時間前を経過)

Event.where('start_at <= ?', Time.zone.now + 1.hour)

終了日時の3時間後以(終了3時間後を経過)

Event.where('end_at <= ?', Time.zone.now - 3.hours)

終了日時の翌日の1時以後(終了翌日の1時以後を経過)
※下記の例は終了日時が午前1時以前に設定されないことが前提

Event.where('end_at < ?', Time.zone.now.beginning_of_day + 1.hour)

期間

イベントが本日中(開始日時が本日中)

Event.where(start_at: Time.zone.now.all_day)

開始の1時間前から開始30分後までの間

Event.where('start_at <= ?', Time.zone.now + 1.hour)
     .where('start_at >= ?', Time.zone.now - 30.minutes)

イベント終了後の当日の22時から24時までの間

base_datetime = Time.zone.now
Event.where(start_at: base_datetime.all_day)
     .where('end_at <= ?', base_datetime)
     .where('? <= ?', base_datetime.beginning_of_day + 22.hours, base_datetime)

以上です。

この記事が気に入ったらサポートをしてみませんか?