哪个DateTime方法用于获取特定日期的记录?

时间:2015-11-30 10:57:01

标签: ruby-on-rails-4 rails-activerecord delayed-job sidekiq resque

我的网络应用程序中有一个后台工作程序,必须在指定日期内获取并处理所有记录。

例如,如果我指定Nov 30 2015,则应该将记录从Nov 30 2015 00:00:00提取到Nov 30 2015 23:59:59

以前我使用的是DateTime.now,它似乎运行正常,但今天我在rails控制台中注意到ActiveRecord生成错误的SQL(来自我的应用程序逻辑'观点)日期范围:from {{ 1}}到Nov 29 2015 22:00:00

我担心Nov 30 2015 21:59:59可能会获取错误的记录或无法获取所需的记录。

另一方面,

DateTime.now似乎生成了正确的日期范围(从00:00 AM到23:59 PM)。我应该使用它而不是DateTime.current吗?

DateTime.now

DateTime.now

DateTime.current

date_to_check = DateTime.now
# Mon, 30 Nov 2015 12:33:36 +0200

DailyDiagramsLog.where(
    day: date_to_check.beginning_of_day..date_to_check.end_of_day)

# SELECT "daily_diagrams_logs".* FROM "daily_diagrams_logs" 
# WHERE ("daily_diagrams_logs"."day" 
# BETWEEN '2015-11-29 22:00:00.000000' AND '2015-11-30 21:59:59.000000')

1 个答案:

答案 0 :(得分:1)

您可以使用Date.today获取特定日期的记录,如: -

date = Date.today
DailyDiagramsLog.where(:day => (date.beginning_of_day..date.end_of_day))
or
time = Time.now
DailyDiagramsLog.where(:day => time.beginning_of_day..time.end_of_day)