10

今日の通話を照会するスコープがあります。スコープに基づいて、今日のコール数をカウントするために使用します。

日付は 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 によりキャッチされる呼び出し)

irb(main):010:0> Call.last.transfer_date
  Call Load (0.9ms)  SELECT "calls".* FROM "calls" ORDER BY "calls"."id" DESC LIMIT 1
=> Sun, 07 Oct 2012 19:45:00 CDT -05:00
irb(main):011:0> 

irb(main):011:0> Call.last.transfer_date.utc
  Call Load (1.3ms)  SELECT "calls".* FROM "calls" ORDER BY "calls"."id" DESC LIMIT 1
=> 2012-10-08 00:45:00 UTC

今日の 00:00 から 23:59 までの通話のみを照会する方法を見つけようとしています。これまでのところ、utc、ゾーンなどの有無にかかわらずスコープを試みても機能しません。昨日(ローカルタイムゾーンでフォーマットされている場合は昨日)からの呼び出しを含むUTCに基づいてスコープを取得し続けます。

正しい出力を得るために 2 つの時間の間でクエリを実行するにはどうすればよいですか? 私はここでちょっと迷っています。

4

3 に答える 3

17

専用レンジをご利用いただけます。

scope :today, where(:transfer_date => Date.today...Date.tomorrow)
于 2012-10-09T14:20:55.597 に答える
7

スコープを次のように書き換えることで、UTC を補正することができました。

scope :today, where("transfer_date BETWEEN ? AND ?", Time.zone.now.beginning_of_day, Time.zone.now.end_of_day)
于 2012-10-09T14:16:03.353 に答える