【问题标题】:How to get the request timezone?如何获取请求时区?
【发布时间】:2012-08-20 07:27:03
【问题描述】:

我是 Rails 的新手,我面临以下问题,我想知道正在访问我的控制器的客户端时区。有没有办法做到这一点?我想做如下代码:

client_timezone = request.get_timezones

【问题讨论】:

  • 之前已经回答过:[link]stackoverflow.com/questions/338482/…
  • 该问题的答案是使用 js(客户端,我需要服务器端)或 maxmind/geoip 数据库(服务器端),我想知道是否有 gem oa rails 方法可以做一样的。

标签: ruby ruby-on-rails-3 timezone


【解决方案1】:

在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

的偏移量

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

但我猜你的要求是第一个

祝你好运

【讨论】:

    【解决方案2】:

    为了实现我想要的,我使用了两个 gem,一个名为 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:要使用时区 gem,您必须在 geonames 创建一个帐户

    【讨论】:

    【解决方案3】:

    在搜索我的迷你项目时,我还从 TimeZoneDB 找到了一个替代 API。

    您可以通过经纬度查询获取GMT偏移量,也可以直接通过time zone name查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-26
      • 2017-06-19
      • 2015-12-22
      • 1970-01-01
      相关资源
      最近更新 更多