2011-01-26 44 views
1

節省一個區域的時間並在另一個區域查看它們的標準是什麼?我有這個在我的environment.rb以UTC保存日期時間,在Rails中查看/查詢用戶的時區?

config.time_zone = 'UTC' 

但我想渲染它,然後進行查詢,如在他們的時區,在那裏beginning_of_day返回當日開始在他們的時區而不是UTC「今天創建的所有帖子」。 rails是否已經在後臺處理轉換?

這裏的問題:

@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