ActiveRecord查询用户时区的日期

时间:2016-11-11 18:46:14

标签: ruby-on-rails database timezone rails-activerecord

我在相对于用户的同一天查询对象(即如果在用户的时区是2016-11-11,他们应该会看到11-11发生的事件他们的时区)。

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

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

我希望它能够提取日期时间与当前用户的时区(通过around_actionTime.use_zone中设置)相同的日期。我在application.rb中设置了这个:

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

但是,不会返回第二天存储的事件。例如,11月11日晚10点山区时间的事件存储在UTC时间11月11日上午5点12分。它应该仍然会在11/11发生时返回给Mountain Time用户。

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

1 个答案:

答案 0 :(得分: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)