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

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

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

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

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

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

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

共收到 10 条回复
1924

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

370

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

2456

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

2575

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

558

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

162

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

370

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

2575

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

370

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

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