0

サーバーのデフォルトのタイムゾーンは +0400 (モスクワ) です。UTC 形式での DB へのすべてのインスタンスの記録。IE: ユーザーが 04-00 でアイテムを作成すると、これは 00-00 として記録されます。手に入れようとしているとき

Item.last 

UTC の raw 時刻が表示されます。私が尋ねているとき

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のメソッドの使用に注意してください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 タイムゾーンで 1 日が始まるモスクワの時刻の関係です:)

于 2012-11-30T12:40:56.273 に答える