nul*_*tek 10 timezone activerecord ruby-on-rails ruby-on-rails-3
我有一个范围来查询今天的电话.基于范围,我用它来计算今天的通话量.
我的日期以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)
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我正在试图弄清楚如何只查询今天00:00到23:59之间的通话.到目前为止尝试使用和不使用utc,zone等的范围都不起作用.它一直根据UTC提取范围,包括昨天的呼叫(昨天如果用当地时区格式化).
如何在两次之间查询以获得正确的输出?我有点迷失在这里.
Sim*_*tti 17
您可以使用专属范围.
scope :today, where(:transfer_date => Date.today...Date.tomorrow)
Run Code Online (Sandbox Code Playgroud)
我通过重写我的范围来补偿UTC,如下所示:
scope :today, where("transfer_date BETWEEN ? AND ?", Time.zone.now.beginning_of_day, Time.zone.now.end_of_day)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10556 次 |
| 最近记录: |