Rails处理用户指定的时区



我想显示当前用户登录的时区内其他用户创建的日期时间。

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

相关内容

  • 没有找到相关文章

最新更新