ActiveRecord 查询用户时区中的日期

mik*_*agz 5 database timezone ruby-on-rails rails-activerecord

我正在查询与用户相关的同一日期的对象(即,如果用户所在的时区是 2016 年 11 月 11 日,他们应该会看到在他们所在时区的 11 月 11 日发生的事件)。

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

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

我希望它能够提取日期时间与当前用户的时区(在around_actionvia 中设置Time.use_zone)相同的日期的事件。我在 application.rb 中有这个设置:

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

但是,不会返回存储在第二天 UTC 中的事件。例如,山地时间 11/11 10PM 的事件存储在 UTC 的 11/12 5AM。它仍然应该返回给 Mountain Time 用户,就像 11/11 发生的那样。

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

mik*_*agz 5

感谢这个问题,我找到了答案:

在 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)