Как преобразовать время в часовой пояс пользователей в Rails - PullRequest
3 голосов
/ 29 сентября 2010

Я установил местный часовой пояс в Rails с помощью этой функции JavaScript в моем макете:

<script type="text/javascript" charset="utf-8">
    <% unless session[:timezone_offset] %>
        $.ajax({
                url: '/main/timezone',
                type: 'GET',
                data: { offset: (new Date()).getTimezoneOffset() }
        });
    <% end %>
</script>

, где это функция получения:

# GET /main/timezone                                                     AJAX
  #----------------------------------------------------------------------------
  def timezone
    #
    # (new Date()).getTimezoneOffset() in JavaScript returns (UTC - localtime) in
    # minutes, while ActiveSupport::TimeZone expects (localtime - UTC) in seconds.
    #
    if params[:offset]
      session[:timezone_offset] = params[:offset].to_i * -60
      ActiveSupport::TimeZone[session[:timezone_offset]]
    end
    render :nothing => true
  end

И затем у меня есть смещение вмой сеанс, поэтому я делаю что-то вроде этого, чтобы показать время:

<%= (@product.created_at + session[:timezone_offset]).strftime("%m/%d/%Y %I:%M%p") + " #{ActiveSupport::TimeZone[session[:timezone_offset]]}" %>

Действительно ли все это действительно необходимо в Rails 3?Я думаю, что первые два кодовых блока могут быть, но третий кажется немного чрезмерным ...

1 Ответ

1 голос
/ 29 сентября 2010

Вы можете установить текущий часовой пояс, и он будет запомнен для всех операций. Это можно сделать в before_filter некоторого очень высокого контроллера, такого как AppController. Например

class ApplicationController < ActionController::Base
  before_filter :set_zone_from_session

  private

  def set_zone_from_session
    # set TZ only if stored in session. If not set then the default from config is to be used
    # (it should be set to UTC)
    Time.zone = ActiveSupport::TimeZone[session[:timezone_offset]] if session[:timezone_offset]
  end

end

Возможно, это не выглядит лучше на первый взгляд - но это повлияет на все виды, поэтому нет необходимости в каких-либо преобразованиях там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...