2016-11-11 17 views
4

我在查询与用户相同的日期的对象(即如果它是在用户的时区2016-11-11,他们应该看到发生在11- 11在他们的时区)。ActiveRecord在用户时区的日期查询

我的数据库以UTC格式存储事件日期时间(类型为datetime)。当我尝试:

Event.where(DATE(datetime) = ?", Time.zone.today)

我希望它拉事件,其中日期时间是在同一个日期作为当前用户的时区(这是在around_action通过Time.use_zone设置)。我有这个设置在application.rb中:

config.active_record.time_zone_aware_types = [:datetime, :time]

然而,在返回存储在第二天UTC事件。例如,11/11上午10点的山区时间事件存储在11/12 5AM(UTC)。如11/11所发生的,它仍应该返回给Mountain Time用户。

如何查询数据库以获取当前用户日期的事件?非常感谢!

回答

2

多亏了这个问题,我找到了答案:

Getting date with timezone offset in postgres

我基本需要的日期时间转换为UTC 第一,然后给用户时区。

Event.where("DATE(datetime AT TIME ZONE 'UTC' AT TIME ZONE ?) = ?", Time.now.in_time_zone(current_user.time_zone).strftime("%Z"), Time.zone.today)

相关问题