我页面上的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
除了这个表达式的右边部分不起作用,我不确定我是否在这里采取正确的方式。无法得到它。
答案 0 :(得分:15)
这是谷歌的回答:
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 } );
}
答案 1 :(得分:6)
@snitko - 很长一段时间你的回答对我很有帮助。然而,正如@Giovanni指出的那样,在某些情况下它没有考虑夏令时,因为它在给定分钟偏移的情况下拉出第一个时区。我找到了一个简单的工作答案,说明了夏令时。
前往此处 - http://site.pageloom.com/automatic-timezone-detection-with-javascript,这是一个javascript时区检测器。您只需将从网站链接的javascript代码(或右here)复制到您的应用程序的javascript文件之一(application.js正常工作)。它允许您通过名为jstz
的对象检索时区。
然后,在application.html.erb中我有
<script type="text/javascript">
var timezone = jstz.determine();
document.cookie = 'time_zone='+timezone.name()+';';
</script>
在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设置代码。
答案 2 :(得分:3)
当我将它存储在我的用户模型中时,它就像这个
一样简单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,我认为将它存储在用户模型中会更有意义。