Railsでアプリケーションを作成していて、ユーザのタイムゾーンをユーザの手をわずらわせること無く取得したいことがあり、その方法を調べたものの、お決まりの方法らしきものを見つけることができなかった。
それでひとまず、detect_timezone_railsというgemを利用してブラウザ側でタイムゾーンを判定して結果をcookieに保存し、サーバ側でその値を読み取ることにした。
Gemfile に次の行を入れてbundle installする。
gem 'detect_timezone_rails'
assets/javascripts/application.js に次の行を追記する。
//= require detect_timezone //= require jquery.detect_timezone //= require jquery.cookie
jquery.cookie pluginはこちらから https://github.com/carhartl/jquery-cookie
assets/javascripts/timezone.js.coffee といった名前のファイルを作って以下の内容を書く。
$ -> unless $.cookie('timezone')? $.cookie('timezone', $("html").get_timezone(), {expires: 1})
app/controller/application_controller.rb にタイムゾーンを設定するコードを書く。
before_filter do Time.zone = cookies[:timezone] || 'UTC' end
もっと簡単な方法ないかな。