2016-11-24 52 views
1

我確實喜歡下面的模型方法。它對我來說工作得很好。但我不知道它是否適用於所有情況。如何更新rails datetime字段以匹配用戶時區?

服務器將所有時間記錄存儲爲UTC格式。所以在這裏我得到了當前用戶格式化的偏移量,基於此我更新了endtime。

def update_job 
    off = Time.now.formatted_offset 
    off_split = off.gsub(off.first, '').split(':') 
    if off.first == '+' 
     off_dat = self.enddate = self.enddate - off_split.first.to_i.hours 
     off_dat = self.enddate = self.enddate - off_split.last.to_i.minutes if off_split.length == 2 
    elsif off.first == '-' 
     off_dat = self.enddate = self.enddate + off_split.first.to_i.hours 
     off_dat = self.enddate = self.enddate + off_split.last.to_i.minutes if off_split.length == 2 
    end 
    self.update_attributes(enddate: off_dat) 
    end 

我可以使用上面的代碼嗎?

+0

您可以根據此應用程序更改時區(在這段時間將以UTC存儲,但在獲取時您將獲得您在config中設置的時區)http://api.rubyonrails .org/classes/ActiveSupport/TimeZone.html,您不需要以UTC存儲它,您可以以任何區域格式存儲它,活動記錄會感知它並將其存儲在UTC –

回答

0

您可以更改應用程序的時區,(在這個時候將存儲在UTC,但在獲取它,你將得到的時間在您在配置設置的區域)

api.rubyonrails.org/classes/ActiveSupport/TimeZone.html 

你不需要以UTC存儲時間,您可以以任何區域格式存儲它,活動記錄會感知它並將其存儲在UTC

如果您遇到了每個用戶都可以擁有不同時區並且需要查看數據的情況他們的時區,那麼你需要在用戶表中存儲用戶時區然後在應用程序控制器中,你可以動態設置它

#callback 

def set_user_time_zone 
    if current_user 
     Time.zone = current_user.time_zone 
    else 
    Time.zone = config.time_zone 
    end 
end 
相關問題