前にまとめたけど、こんなんのもあるのかというメモ
環境
$ bin/rails --version Rails 5.2.2
やり方
all_dayメソッドを使うだけ
date = "2019-08-17".to_date # => Sat, 17 Aug 2019 date.all_day # => Sat, 17 Aug 2019 00:00:00 UTC +00:00..Sat, 17 Aug 2019 23:59:59 UTC +00:00
使い所
例えばActiveRecordで範囲計算をするとき、date型をうっかり入れてしまうと時間情報が欠落してしまうので、上手く行かない場合がある。
その場合は allday
をつかって範囲をとってあげるといい
例えばこんなUserがあって
User.last.created_at # User Load (0.3ms) SELECT `users`.* FROM `users` ORDER BY `users`.`id` DESC LIMIT 1 #=> Sat, 17 Aug 2019 07:43:19 UTC +00:00
date型でwhere文を作るとうまくいかない
date = "2019-08-17".to_date # => Sat, 17 Aug 2019 User.where("created_at <= ?",date).pluck(:id) # (0.3ms) SELECT `users`.`id` FROM `users` WHERE (created_at <= '2019-08-17') => []
そのため、all_dayを使ったほうが確実に取れる
User.where(created_at: date.all_day).pluck(:id) # (2.2ms) SELECT `users`.`id` FROM `users` WHERE `users`.`created_at` BETWEEN '2019-08-17 00:00:00' AND '2019-08-17 23:59:59' #=> [5]