比较 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
我在使用 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