反映用户在Ruby应用程序中的时间戳上选择的时区

时间:2013-02-04 09:54:50

标签: ruby-on-rails timezone timestamp

我想根据用户选择的时区在我的ruby应用程序上创建每个时间戳。我是铁杆中的新手,所以无法弄清楚如何去做。

我制作了下拉列表供用户从中选择时区

<%= time_zone_select( "user", 'time_zone', ActiveSupport::TimeZone.all, :default => "Beijing")%>

如何选择时区反映所使用的所有时间戳。

1 个答案:

答案 0 :(得分:1)

before_filter中使用application_controller.rb可确保每次请求都调用此方法。每个请求的默认时区由config.time_zone设置,因此您必须在每个请求上更新Time.zone。看看http://api.rubyonrails.org/classes/Time.html

before_filter :set_user_timezone

def set_user_timezone
  if current_user && current_user.time_zone.present?
    Time.zone = current_user.time_zone
  end
end

使用特定时区评估表达式,请使用Time.use_zone

Time.use_zone('Singapore') do
  Time.zone.parse(...) # returns a time in Singapore
end

更新:使用session保存时区

# application_controller.rb
before_filter :set_user_timezone

def set_user_timezone
  Time.zone = session[:timezone] || 'Default timezone here'
end

# time_zone_controller.rb
def save_time_zone
  session[:timezone] = params[:timezone]
end

# routes
match 'save_time_zone' => 'time_zone#save_time_zone'

# js
$('#user_time_zone').change(function() {
  $.ajax({
    url: '/save_time_zone',
    data: { time_zone: $(this).val() }
  })
})