【发布时间】:2015-11-30 19:09:58
【问题描述】:
我的网络应用中有一个后台工作者,它必须获取和处理给定日期的所有记录。
例如,如果我指定Nov 30 2015,它应该从Nov 30 2015 00:00:00 获取记录到Nov 30 2015 23:59:59。
以前我使用DateTime.now,它似乎工作正常,但今天我在rails 控制台中注意到ActiveRecord 生成的SQL 错误(从我的应用程序逻辑的角度来看)日期范围:从Nov 29 2015 22:00:00 到@987654326 @。
我担心DateTime.now 可能会获取错误的记录或不会获取所需的记录。
另一方面,DateTime.current 似乎生成了正确的日期范围(从上午 00:00 到下午 23:59)。我应该用它代替DateTime.now吗?
DateTime.now:
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')
DateTime.current:
date_to_check = DateTime.current
# Mon, 30 Nov 2015 10:35:27 +0000
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-30 00:00:00.000000' AND '2015-11-30 23:59:59.000000')
【问题讨论】:
标签: ruby-on-rails-4 rails-activerecord delayed-job sidekiq resque