如何查询今天创建的所有记录(午夜UTC ..现在)

时间:2012-04-06 17:15:58

标签: ruby-on-rails ruby-on-rails-3

我正在尝试创建一个created_at查询范围,该范围将捕获从午夜UTC(默认为db)创建的所有记录到现在。在过去,我已经能够通过以下方式查询时间范围:

created_at => (24.hours.ago..Time.now)

但是为新用例调整上述内容不起作用:

created_at => (Date.today..Time.now)

关于如何将created_at范围更新为今天/不是过去24小时内的所有记录的任何建议?

由于

5 个答案:

答案 0 :(得分:12)

created_at => (DateTime.now.at_beginning_of_day.utc..Time.now.utc)

答案 1 :(得分:2)

我想,您也可以尝试下线。

ModelName.all :condition => ["DATE(created_at) = DATE(?)", Time.now]

或在Rails 3中

Model.where "DATE(created_at) = DATE(?)", Time.now

干杯!

答案 2 :(得分:2)

我认为应该考虑时区。

where(:created_at => Time.zone.now.beginning_of_day.utc..Time.zone.now.end_of_day.utc)

Rails会自动将时间更改为utc时间,因此以下情况也可以。

where(:created_at => Time.now.beginning_of_day..Time.now.end_of_day)

答案 3 :(得分:1)

从Rails5.1开始,引入了一种新方法Date#all_day,该方法返回a range of a day

代替:

where(created_at: Date.today.beginning_of_day..Date.today.end_of_day)

一种优雅的方式是:

where(created_at: Date.today.all_day)

答案 4 :(得分:0)

Date.today.beginning_of_day.utc..Date.today.end_of_day.utc