2011-01-26 4 views
1

時間を節約して別のゾーンで見るための基準は何ですか? DatetimeをUTCで保存し、ユーザのタイムゾーンをRailsで表示/照会しますか?

config.time_zone = 'UTC' 
しかし、私はそれをレンダリング、および beginning_of_dayが自分のタイムゾーンではなくUTCで一日の始まりを返す彼らのタイムゾーンに「今日作成されたすべての記事」のようなクエリをしたい:私は私の environment.rbでこれを持っています。レールはすでにバックグラウンドで変換を処理していますか?

は、ここで問題です:

@now = Time.now 
=> Wed Jan 26 09:50:04 -0600 2011 
User.count(:conditions => ["created_at > ?", @now]) 
    SQL (1.3ms) SELECT count(*) AS count_all FROM `users` WHERE (created_at > '2011-01-26 09:50:04') 
=> 1 
@now = Time.now.utc 
=> Wed Jan 26 15:50:10 UTC 2011 
User.count(:conditions => ["created_at > ?", @now]) 
    SQL (1.2ms) SELECT count(*) AS count_all FROM `users` WHERE (created_at > '2011-01-26 15:50:10') 
=> 0 

答えて

6

activesupportのが組み込まれていた方法の任意のタイムゾーンの時刻値を表示します。通常、ユーザーモデルにtime_zone列を追加し、ユーザーの優先ゾーンに設定します。

@user.update_attribute(:time_zone,'Eastern Time (US & Canada)') 

時間値を表示するときは、ゾーンをユーザーのゾーンに設定します。

Time.zone = @user.time_zone 
Time.zone.now # shows current time according to @user.time_zone 

一つのアプローチは、それが要求ごとに行われているApplicationControllerでこれを設定することです:

class ApplicationController < ActionController::Base 
    before_filter :set_time_zone 

    def set_time_zone 
    Time.zone = current_user.time_zone if current_user 
    end 
end 

注:activesupportの下APIを参照してください:: TimeWithZone

関連する問題