2016-11-24 51 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 
相关问题