Rails 大家在项目中是怎样设置时区的?

darkbaby123 · 发布于 2012年12月08日 · 最后由 kgen 回复于 2012年12月11日 · 3505 次阅读
2575

我有一个项目,采用Rails默认的时区设置,就是保存进数据库的是UTC时间,然后在Controller层面根据每个用户在before_filter里设置Time.zone,达到转换时间的目的。

至于怎么根据用户设置时区,目前的做法是,页面上给一个下拉框,让用户选择一个时区,选择后存入session,刷新一遍页面,以后每次页面请求就从session里取值赋给Time.zone。

现在的问题是:每次打开浏览器,都要先选择一下时区,而且可以随意改,感觉不是很友好。举个例子,大部分人不会去手动改时区,他们需要的是页面打开后,时间相关的地方就是他们的本地时间。

请问有没有什么办法,能够在一个用户初次打开页面时,服务端就能在那次请求中“猜出”客户端的时区,然后把Time.zone设置好?或者有没有什么人性化的办法去做到这一点?

各位在项目中都是怎么用的?

共收到 10 条回复
1924
uudui · #1 · 2012年12月08日

我们目前的运维平台是把时区code保存到用户表中,在添加用户的时候就直接给用户设置好了默认时区,当然用户自己可以自由修改。

370
kgen · #2 · 2012年12月08日

根据IP获得地理位置,就能得到当地的时区了。

2456
zlx_star · #3 · 2012年12月09日

我记得 redmine 后台有个设置时区的功能,不知道它们是怎么做的,你可以参考参考它们的代码!

2575
darkbaby123 · #4 · 2012年12月09日

@uudui 我也想这样弄,但有些页面是用户不登录也能看的,所以没办法。。。 @kgen 法子不错!但貌似比较麻烦,要去找ip和地理位置的对应表吧,而且要ip -> 地理位置 -> 时区。 @zlx_star 我去看看。

8
hooopo · #5 · 2012年12月09日

js

558
camel · #6 · 2012年12月09日 1 个赞

#4楼 @darkbaby123 ip与地理位置对应是很常见成熟的做法,有现成的gem可以用。https://github.com/mtodd/geoip

162
quakewang · #7 · 2012年12月09日

服务端返回UTC,在客户端用js,获取时区,再来显示: new Date().getTimezoneOffset()

370
kgen · #8 · 2012年12月09日 1 个赞

#4楼 @darkbaby123 IP地址到地理位置,可以用MaxMind的数据库(免费版数据延迟有1个月),然后用 @camel 推荐的那个插件集成即可。这些东西都非常成熟了,对开发工作量影响不大。

2575
darkbaby123 · #9 · 2012年12月10日

@kgen 嗯,我也看了。有一个免费数据库,每个月的周二更新,不过不知道跟收费数据库差别多大。我看他们网站发的每个city的误差表,好像还是有点的。主要是如果识别不出来还是要搞一套备选方案。我们还是用js算了,简单有效,这个ip表有时间自己玩玩再说。

370
kgen · #10 · 2012年12月11日

#9楼 @darkbaby123 要是差别不大的话,他们收费版就卖不动啦 :-P

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册