ruby-on-rails – ActiveRecord查询用户时区的日期

我在相对于用户的相同日期查询对象(即如果在用户的时区是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]

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

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

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

Getting date with timezone offset in postgres

我基本上需要先将datetime转换为UTC,然后转换为用户时区.

Event.where(“DATE(时区的日期时间’时区’UTC’时区?)=?”,Time.now.in_time_zone(current_user.time_zone).strftime(“%Z”),Time.zone.today)

点赞