我的服务器默认时区是+0400(莫斯科)。所有实例以UTC格式记录到DB。 IE:用户在04-00创建项目,记录为00-00。当我想要
时Item.last
我看到UTC原始时间。当我问的时候
Item.last.created_at
我得到+0400时间。但!当我使用像
这样的标准时间函数时Item.where('created_at > ?', Time.now.beginning_of_day)
正在进行SQL查询
SELECT `items`.* FROM `items` WHERE (items.created_at > '2012-11-30 00:00:00')
而不是
SELECT `items`.* FROM `items` WHERE (items.created_at > '2012-11-29 20:00:00')
所以我失去了4个小时。小麻烦是使用in_time_zone:
Time.now.beginning_of_day.in_time_zone(-4)
但我不是一个绝地的方式:D有什么想法吗?
答案 0 :(得分:1)
我希望您的用户在其个人资料中有一些与其时区相关的设置。在这种情况下,您可以执行以下操作:
Time.use_zone(zone_of_current_user) do # like 'America/New_York'
@products = Product.where('created_at > ?', Time.zone.now.beginning_of_day)
end
这样您就可以设置块的区域。
请注意使用zone
的{{1}}方法。
答案 1 :(得分:0)
我想我已经解决了它:
Time.now.beginning_of_day.in_time_zone('UTC')
=> Thu, 29 Nov 2012 20:00:00 UTC +00:00
所以这是关系莫斯科什么时候以UTC时区开始的那天:)