2012-08-24 32 views
3

我在rails中很新,我面临以下问题,我想知道访问我的控制器的客户端时区。有没有办法做到这一点?我想要做的事,如下面的代码:如何获取请求时区?

client_timezone = request.get_timezones 
+0

已经回答以前:[链接] http://stackoverflow.com/questions/338482/can-you-determine-timezone-from-request-variables – RadBrad

+0

在这个问题的答案是使用JS(客户端,我需要服务器端)或者maxmind/geoip数据库(服务器端),我想知道是否有gem oa rails的方式来做同样的事情。 – McSas

回答

5

要达到我想要的东西,我用了两个宝石,一个叫Timezone和另一个叫GeoCoder。为了获得服务器端的时区。

有了地理编码器我可以请求一个请求的纬度和经度,并利用这条信息,我使用时区gem来获取该坐标的时区。

这里有一些代码:

def my_method 
    my_latitude = request.location.latitude 
    my_longitude = request.location.longitude 
    timezone = Timezone::Zone.new :latlon => [my_latitude, my_longitude] 
    timezone_offset = timezone.offset 
    .... 
end 

PS:使用时区的宝石,你必须创建geonames

+0

好方法。我环顾四周,发现替代方案是使用类似https://github.com/kbaum/browser-timezone-rails的,这涉及到使用依赖于Jquery的JS。 – nicooga

0

那么通过了你的时间在cookie中,然后拿到时区从它

var offset = (new Date()).getTimezoneOffset() 
    var date = new Date(); 
    date.setTime(date.getTime()+3600000); 
    document.cookie = "utc_offset="+offset+"; expires="+date.toGMTString();+"; path=/"; 

有你有在与UTC偏移用户时区

或在数据库中存储用户的时区信息,然后检索它

但我猜哟UR要求是第一位的

好运

0

帐户在寻找我的小项目,我发现了一个替代API从TimeZoneDB为好。

您可以通过纬度&经纬度查询得到GMT偏移量,或直接按time zone name查询。