比较 rails 个活动记录中日期时间列的日期

Compare date on a datetime column in rails active record

我在使用 mysql 时尝试将日期时间列与 rails 中的日期进行比较时遇到问题。例如,我想查找 user create in 2020-05-01 但 "created_at" 列的类型是 datetime,首先我尝试:

User.where("date(created_at) = ?", date) # date is 2020-05-01

但是当我在日本时区使用 rails 并且在 2020-05-01 07:00 GMT+9 创建的用户时,rails 会将其保存在 mysql与 GMT+0 。这意味着 created_at 是 mysql 中的 2020-04-30 22:00 GMT+0。然后User.where("date(created_at) = ?", date)不会return这个

这种情况有好的解决办法吗?

像这样

# convert date to datetime
date = "2020-05-01".to_datetime 

所以你可以这样做:

User.where(created_at: date.beginning_of_day..date.end_of_day)

加上下面的评论,就更短了:

User.where(created_at: created_at: date.all_day)

date.all_day 会给你

Sun, 17 May 2020 00:00:00 UTC +00:00..Sun, 17 May 2020 23:59:59 UTC +00:00