我想根据用户选择的时区在我的 ruby 应用程序上制作每个时间戳。我是 Rails 中的 ruby 新手,所以不知道该怎么做。
我制作了下拉列表供用户选择时区
<%= time_zone_select( "user", 'time_zone', ActiveSupport::TimeZone.all, :default => "Beijing")%>
如何使时区的选择反映在所有使用的时间戳上。
我想根据用户选择的时区在我的 ruby 应用程序上制作每个时间戳。我是 Rails 中的 ruby 新手,所以不知道该怎么做。
我制作了下拉列表供用户选择时区
<%= time_zone_select( "user", 'time_zone', ActiveSupport::TimeZone.all, :default => "Beijing")%>
如何使时区的选择反映在所有使用的时间戳上。
使用before_filter
inapplication_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() }
})
})