0

我的服务器默认时区是 +0400(莫斯科)。以 UTC 格式记录到数据库的所有实例。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 有什么想法吗?

4

2 回答 2

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方法 of Time

于 2012-11-30T07:48:51.547 回答
0

我想我已经解决了:

Time.now.beginning_of_day.in_time_zone('UTC')
 => Thu, 29 Nov 2012 20:00:00 UTC +00:00 

所以这就是莫斯科时间在 UTC 时区开始时的关系:)

于 2012-11-30T12:40:56.273 回答