在Rails中设置当前的Time.zone?
我的页面上的Javascript将客户端UTC偏移量保存到cookie。 如何使用此cookie创建TimeZone并将其分配给Time.zone?
我需要这样的东西:
before_filter :set_time_zone def set_time_zone Time.zone = ActiveSupport::TimeZone.new('my timezone', cookies[:timezone]) end
除了这个表达式的右边部分不起作用,我不确定我是否在这里采取正确的方式。 无法得到它。
这是googled回答的工作:
min = cookies[:timezone].to_i Time.zone = ActiveSupport::TimeZone[-min.minutes]
只是为了说清楚,javascript部分:
if(!($.cookie('timezone'))) { current_time = new Date(); $.cookie('timezone', current_time.getTimezoneOffset(), { path: '/', expires: 10 } ); }
@snitko – 很长一段时间你的回答对我很有帮助。 然而,正如@Giovanni指出的那样,在某些情况下它没有考虑夏令时,因为它在给定分钟偏移的情况下拉出第一个时区。 我找到了一个简单的工作答案,说明了夏令时。
到这里 – http://site.pageloom.com/automatic-timezone-detection-with-javascript ,这是一个javascript时区检测器。 您只需将从网站链接的javascript代码(或此处 )复制到您的应用程序的javascript文件之一(application.js工作正常)。 它允许您通过名为jstz
的对象检索时区。
然后,在application.html.erb中我有
在application_controller.rb中,我有
before_filter :set_timezone private def set_timezone Time.zone = cookies["time_zone"] end
这就是你所需要的! 为您的Rails应用程序正确设置了时区。
编辑:由于加载了javascript文件的方式和顺序不同,您可能需要在application.html.erb中的<\body>
标记之后放置javascript cookie设置代码。
当我将它存储在我的用户模型中时,它就像这样简单
def set_time_zone Time.zone = current_user.time_zone unless current_user.blank? end
所以也许你可以做到
def set_time_zone Time.zone = cookies[:timezone] end
这是未经测试的,我从来没有试过从cookie中做到这一点,我认为将它存储在User模型中更有意义。