我正在做一个简单的查询,我正在寻找比给定时区晚created_at
的记录,例如:2015-11-30T11:16:15.039Z
通过
User.where(["created_at > ?", '2015-11-30T11:16:15.039Z'])
我被期望不会收到那段时间的记录,尽管它会返回。感觉好像我的查询是created >=
。
我想到的另一件事是created_at
不是数据库中的时区,它以这种格式存储:
created_at
----------------------------
2014-06-25 04:51:35.689021
这可能是问题所在,但我现在还不确定如何解决它。
非常感谢任何建议。
谢谢
答案 0 :(得分:0)
您可以按时区创建记录,如: -
User.where("created_at > ?", Time.zone.now.beginning_of_day)
or
User.where("created_at > ?", Time.zone.utc_to_local(DateTime.parse("2015-11-30T11:16:15.039Z"))
答案 1 :(得分:0)
时区是一个不变的问题。
<强> TL; DR 强>
User.where(['created_at > ?', Time.zone.parse('2015-11-30T11:16:15.039Z')])
在您的rails应用程序中,最理想的是在config/application.rb
module MyAwesomeApp
class Application < Rails::Application
...
config.time_zone = 'Central Time (US & Canada)'
...
end
end
您可以通过运行以下rake命令找到有效时区列表: -
rake time:zones:all
现在,在执行查询时,您可以执行以下操作。
User.where(['created_at > ?', Time.zone.parse('2015-11-30T11:16:15.039Z')])
在这种情况下,我们采用给定的UTC ISO8601格式并通过Time#parser
应用应用程序时区。
这应确保查询时间采用Active Record所需的格式,并且还包括与应用程序相关的全时区信息。