created_at在where语句和时区中

时间:2012-09-03 20:20:04

标签: mysql ruby-on-rails date timezone

我正在尝试在我的模型中检索当天的所有条目:

where('date(created_at) = date(?)', Date.today)

但是,由于时区(我的当地时间是UTC + 2),我没有预期的结果。例如,如果在午夜后一分钟创建了一个条目,则在数据库中,它将被存储在22:01(所以不是“Date.today”)。

有办法吗?

修改

作为网站的管理员,我想在当地时间“今天”显示条目的数量(这仅用于统计目的!)。所以我想保留时间戳存储在utc中,但在此请求期间将它们转换为我当地的时区!

3 个答案:

答案 0 :(得分:0)

您可以通过多种方式设置正确的时区。一个在这个答案中描述:

https://stackoverflow.com/a/6118837/567126

  

在application.rb中添加以下内容

     

config.time_zone ='东部时间(美国和加拿大)'

答案 1 :(得分:0)

where('date(created_at) = ?', Time.zone.now.to_date)

答案 2 :(得分:0)

数据库中的时间应存储为UTC。这样,当您使用全球网站时,您可以使用自己的时区为每个用户提供服务。

UI(视图)责任是在用户的本地时区显示时间。

对于您的地方,您应该使用 Time.now.utc 这样,您正在使用通用UTC搜索数据库。