我想显示当前用户登录的时区内其他用户创建的日期时间。
I have come across
config.time_zone = 'Central Time (US & Canada)' and
config.active_record.default_timezone = :local
但是我如何将其设置为当前登录用户的时区,它是否会保存其他用户在其时区保存的日期时间并查看其他用户在其特定时区的日期时间?
在您的ApplicationController
中考虑这段代码。
around_action :switch_time_zone, :if => :current_user
def switch_time_zone(&block)
Time.use_zone(current_user.time_zone, &block)
end
它用Time.use_zone( current_user.time_zone )
包装当前请求,它将应用程序的当前时区设置为整个请求的当前用户时区,并且应该导致您的所有时间在当前用户的时区中呈现,除非特别转换为时区。
class ApplicationController < ActionController::Base
around_filter :set_time_zone
def set_time_zone
if logged_in?
Time.use_zone(current_user.time_zone) { yield }
else
yield
end
end
end
https://api.rubyonrails.org/v4.2.5.2/classes/Time.html method-c-zone-3D
使用此Gem https://github.com/basecamp/local_time
<%= local_time(@time.created_at) %>
你只需要像这样传递对象,它将呈现用户登录的本地时间。不需要获取当前用户所在的本地时区。P
我们有一个亚欧互动网站。我们将所有内容保存为UTC时间
那么我们就给出用户所在时区的时间。
=comment.created_at.in_time_zone
首先需要在客户端确定用户的时区,并将其传递给控制器。您可以在cookie中设置它:
jQuery(function() {
var tz = jstz.determine();
$.cookie('timezone', tz.name(), { path: '/' });
});
在你的应用程序控制器中:
class ApplicationController < ActionController::Base
around_filter :set_user_time_zone
private
def set_user_time_zone
timezone = Time.find_zone(cookies[:timezone])
Time.use_zone(timezone) { yield }
end
end