Duo*_*hat 0 mysql activerecord ruby-on-rails
使用 mysql 时,尝试将日期时间列与 Rails 中的日期进行比较时遇到问题。例如,我想找到在 2020-05-01 创建的用户,但“created_at”列的类型是日期时间,首先我尝试:
User.where("date(created_at) = ?", date) # date is 2020-05-01
Run Code Online (Sandbox Code Playgroud)
但是当我在日本时区使用rails并且在 2020-05-01 07:00 GMT+9 创建的用户时,rails 会将其保存在 mysql 中 GMT+0 。这意味着mysql中的created_at是2020-04-30 22:00 GMT+0。然后就User.where("date(created_at) = ?", date)
不会返回这个了。
对于这种情况有好的解决办法吗?
像这样的东西
# convert date to datetime
date = "2020-05-01".to_datetime
Run Code Online (Sandbox Code Playgroud)
所以你可以这样做:
User.where(created_at: date.beginning_of_day..date.end_of_day)
Run Code Online (Sandbox Code Playgroud)
加上下面的评论,它变得更短:
User.where(created_at: created_at: date.all_day)
Run Code Online (Sandbox Code Playgroud)
date.all_day 会给你类似的东西
Sun, 17 May 2020 00:00:00 UTC +00:00..Sun, 17 May 2020 23:59:59 UTC +00:00
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1507 次 |
最近记录: |