如何使用特定时区查询created_at for Yesterday

时间:2012-02-08 17:52:05

标签: ruby-on-rails ruby-on-rails-3 activerecord

现在我有以下查询:

User.find(:all, :conditions => ["guest = ? AND created_at >= ?", false , (Date.yesterday)]).count

昨天在rails / db服务器上的问题是GMT。我需要计数的地方是用PST计算的。

如何更新上述查询以查找昨天在PST时区创建的所有用户?

由于

2 个答案:

答案 0 :(得分:5)

试试这个

@from = (Time.zone.now - 1.day).beginning_of_day.in_time_zone('Pacific Time (US & Canada)')
@to   = (Time.zone.now).beginning_of_day.in_time_zone('Pacific Time (US & Canada)')
User.count(:conditions => ["created_at >= ? and created_at <= ?", @from, @to])

答案 1 :(得分:1)

对此有一个微调,一个微妙的调整 - Date.yesterday使用Date.current将使用时区,而Date.today则不会。如果您将时区设置为明天的时区(例如欧洲/柏林,因为我输入了此区域),那么您可以获得Date.today == Date.yesterday:

>> Time.zone = "Europe/London"
=> "Europe/London"
>> Date.today == Date.yesterday
=> false

>> Time.zone = "Europe/Berlin"
=> "Europe/Berlin"
>> Date.today == Date.yesterday
=> true

使用Date.current == Date.yesterday按预期工作。此示例以irb显示,因此请尝试找到一种方法将其妥善放入rails应用程序中。 注意:我没有显示您需要的确切内容,因为您在初始化时区之前已经进行了一些编码,但只是抛出一些有价值的位。希望这有帮助