6

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

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

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

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

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

谢谢

4

5 回答 5

12
created_at => (DateTime.now.at_beginning_of_day.utc..Time.now.utc)
于 2012-04-06T17:22:18.487 回答
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)

于 2013-05-19T06:15:55.050 回答
2

我想,你也可以试试下面的线。

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

或在 Rails 3 中

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

干杯!

于 2013-04-10T13:10:02.353 回答
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)
于 2020-04-14T09:08:32.027 回答
0
Date.today.beginning_of_day.utc..Date.today.end_of_day.utc
于 2012-04-06T17:21:20.397 回答