在Rails 3中尝试使用时区时,我们会看到一些时髦的东西。假设我们有一个名为start_at的属性,类型为日期时间。在application.rb中,我们根据服务器位置设置了config.time_zone = 'Eastern Time (US & Canada)'
。
当有人将start_at设置为“2014-02-22美国东部时间晚上7点”之类的数据时,它存储为“2014-02-23 01:00:00-5”,因此当我设置命名范围时,例如:
scope :tomorrow, where("start_at = ?", Date.tomorrow)
错误地返回该记录。如果我尝试这样的事情:
scope :tomorrow, where("start_at at time zone 'EST' = ?", Date.tomorrow)
它仍然不起作用。如何创建具有db日期时间比较的范围,这些范围考虑了本地时区而不必做一些荒谬的事情,例如:
scope :tomorrow, where("date(start_at - INTERVAL '5 hours') = ?", Date.tomorrow)
答案 0 :(得分:0)
您必须使用Time.zone选项来使用您配置的区域
scope :tomorrow, where("start_at = ?", Time.zone.today + 1)
我推荐这篇关于Rails time zones
的好文章