Rubyで日付・時刻の範囲検索
指定の時間範囲内の記録を読み出したい場合
(例えば今日中で登録したユーザーを探したい)
よくある書き方
User.where(“updated_at BETWEEN ? AND ?”, beginning_of_day, end_of_day)
Rubyならではの書き方
Rubyでは、もっと簡単にRangeオブジェクトをwhereの値指定として渡す書き方があります。
一日の時刻範囲を指定する
> today = Time.zone.now Mon, 04 Sep 2017 09:54:26 JST +09:00 > today_range = today.beginning_of_day..today.end_of_day Mon, 04 Sep 2017 00:00:00 JST +09:00..Mon, 04 Sep 2017 23:59:59 JST +09:00
あるいは
> today_range = Time.zone.now.all_day Mon, 04 Sep 2017 00:00:00 JST +09:00..Mon, 04 Sep 2017 23:59:59 JST +09:00
一日の時刻範囲をwhereに渡す
> User.where(created_at: today_range) User Load (1.6ms) SELECT `users`.* FROM `users` WHERE (`users`.`created_at` BETWEEN '2017-09-04 00:00:00' AND '2017-09-04 23:59:59')
こうすれば一日中登録したユーザーを簡単に読み出せる
他には
beginning_of_month beginning_of_quarter
など、時間の範囲を指定したい場合使えます。
参考URL:
http://railsdoc.com/references/beginning_of_month
こちらもどうぞ