【问题标题】:Which DateTime method to use to fetch records for particular day?使用哪种 DateTime 方法来获取特定日期的记录?
【发布时间】: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


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多