2016-07-14 25 views
0

我已經離開了我的application.rb,因爲它是默認情況下它以UTC存儲datetime。如何在每個用戶的基礎上轉換datetime

現在在UI級別(僅用於顯示)我想將日期時間轉換爲用戶特定的時區。

如何轉換我從postgresql得到的UTC日期時間,然後將其轉換爲我將爲每個用戶存儲的時區。

我想用進行這種轉換的偏移,因此這樣的:-5:00 or +4:00

它是確定要做到這一點,因爲我只是檢查一些地方,似乎他們抵消季節的變化。

E.g.弗吉尼亞從UTC -5到UTC -4取決於月份。 http://www.timeanddate.com/time/zone/usa/richmond

If UTC is not consistant then I should just store the zone in the database for each user? 
+0

您可以使用Time.current ...檢查了這一點 - http://apidock.com/rails/Time/current/class – Milind

回答

1

當我與調度事件的應用程序,我不得不時區添加到用戶模型,以抵消它們的調度。

當我錄的偏移,我用下面的代碼:

<%= time_zone_select "user", 
        "timezone", 
        ActiveSupport::TimeZone.us_zones, 
        {default: "Mountain Time (US & Canada)"}, 
        {class: "form-control"} %> 

因爲Rails有time zones built into their ActiveSupport model.你可以使用ActiveSupport::TimeZone.all,如果你想用戶是全球性的。

這裏有time_zone_select

一些信息然後取決於你如何使用它,你可以只設置

Time.zone = current_user.timezone unless current_user.nil? 

或在您的application.rb文件類似的東西。

UPDATE

我個人用它來設置控制器的時區上的只有2個動作,其中有必要。

def index 
    @user = current_user 
    @pending = @user.share_events.where("time > ?", DateTime.now.in_time_zone(@user.timezone)) 
    @complete = @user.share_events.where("time <= ?", DateTime.now.in_time_zone(@user.timezone)) 
end 

def new 
    @user = current_user 
    Time.zone = @user.timezone 
    @post = Post.find(params[:post_id]) 
    @share_event = ShareEvent.new 
end 
+0

的application.rb中應保持UTC,只有當我在顯示事物UI應該將日期時間轉換爲用戶特定的時區。 – Blankman

+0

我能否看到您是如何將您的數據庫的UTC時區實際轉換爲用戶特定的? – Blankman

+1

回答更新顯示我使用UTC時區的兩種方式。 – Okomikeruko

相關問題