Ruby on rails 在rails中查询日期范围

Ruby on rails 在rails中查询日期范围,ruby-on-rails,ruby-on-rails-3,activerecord,timezone,Ruby On Rails,Ruby On Rails 3,Activerecord,Timezone,我有一个查询今天通话的范围。根据范围,我使用它来计算今天的通话量 我的日期存储在UTC,但rails将转换为我的本地时区。我要做的是找到今天00:00到23:59之间的所有电话 范围: scope :today, where("DATE(transfer_date) BETWEEN ? AND ?", Time.zone.now.utc.beginning_of_day, Time.zone.now.utc.end_of_day) irb输出:(因UTC而捕获的呼叫) 我想知道如何查询今天00

我有一个查询今天通话的范围。根据范围,我使用它来计算今天的通话量

我的日期存储在UTC,但rails将转换为我的本地时区。我要做的是找到今天00:00到23:59之间的所有电话

范围:

scope :today, where("DATE(transfer_date) BETWEEN ? AND ?", Time.zone.now.utc.beginning_of_day, Time.zone.now.utc.end_of_day)
irb输出:(因UTC而捕获的呼叫)

我想知道如何查询今天00:00到23:59之间的通话。到目前为止,尝试在有utc和没有utc、zone等的情况下确定范围是行不通的。它不断从UTC提取范围,其中包括昨天的调用(如果使用本地时区格式化,则为昨天)


如何在两次查询之间进行查询以获得正确的输出?我在这里有点迷茫。

我能够通过重写我的范围来补偿UTC,如下所示:

scope :today, where("transfer_date BETWEEN ? AND ?", Time.zone.now.beginning_of_day, Time.zone.now.end_of_day)

您可以使用专用范围

scope :today, where(:transfer_date => Date.today...Date.tomorrow)

也许这太过分了,但我建议使用助手方法获取时间范围,然后查询数据库。差不多

# Gets time range for x number timeunits ago
  def time_range(unit, timeunit = nil)
    if timeunit == "weeks"
      now = Time.zone.now.beginning_of_week
    elsif timeunit == "months"
      now = Time.zone.now.beginning_of_month
    else
      now = Time.zone.now.beginning_of_day
    end
    # Ex: time_range(0, "days") --> Get the time range for today  between the beginning of today and the beginning of tommorow - 1 second
    now - unit.send(timeunit)..now + 1.send(timeunit) - 1.seconds - unit.send(timeunit)
  end
将帮助您请求时间范围。所以当你要求像这样的东西时

time_range(0, "days")
返回0天前(今天)的时间范围

然后您可以简单地查询数据库对象,并使用

Calls.where(transfer_date: time_range(unit, timeunit)).count

请你把你的问题说清楚好吗?意思是你给出了什么型号的scope,在底部你今天没有写scope。这很好,谢谢你的例子,但几年前我用了一个简单的lambda scope:)
Wed, 07 Sep 2016 00:00:00 UTC +00:00..Wed, 07 Sep 2016 23:59:59 UTC +00:00
Calls.where(transfer_date: time_range(unit, timeunit)).count