我正在查询相对于用户的相同日期的对象(即,如果它是2016-11-11在用户的时区,他们应该看到在他们的时区11-11发生的事件)。
我的数据库以UTC格式存储事件日期时间(datetime类型)。当我尝试:
Event.where(DATE(datetime) = ?", Time.zone.today)
我希望它能够拉出日期时间与当前用户的时区(通过Time.use_zone
在around_action
中设置)在相同日期的事件。我在application.rb:
config.active_record.time_zone_aware_types = [:datetime, :time]
但是,不返回存储在第二天UTC的事件。例如,山地时间11/11晚上10点的事件存储在UTC时间11/12上午5点。它仍然应该返回给山地时间用户,因为发生在11月11日。
如何查询数据库以获取当前用户日期的事件?很多谢谢!
多亏了这个问题,我找到了答案:
在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)