如何根据用户的当地时间显示不同的时间?

时间:2013-02-17 11:15:45

标签: ruby-on-rails ruby-on-rails-3 internationalization

我确实有这样的设置

配置/ application.rb中

config.time_zone = 'London'
config.active_record.default_timezone = :utc

所有时间都将在伦敦当地时间保存 但是,我的应用程序将在世界各地使用,以便我想用当地时间显示。

我怎样才能使它成为可能?

P.S。我已经看过了,但它似乎只有在用户是Rails应用程序的成员资格时才会起作用 除非看到的人注册并设定当地时间,否则它不会知道当地时间。

是否有任何技术可以获取访问者PC的时区并用它来计算UTC时间?

http://railscasts.com/episodes/106-time-zones-revised?autoplay=true

1 个答案:

答案 0 :(得分:1)

您可以使用javascript根据用户的本地时区转换时间。这是我做的:

在ApplicationHelper.rb中,添加一个生成html的方法,该方法将在客户端的浏览器中调用javascript:

def localize(time)
    "<script type='text/javascript'>localize(#{time.tv_sec * 1000});</script>".html_safe
end

添加将处理时间并显示其字符串格式的javascript函数(使用浏览器的时区)

function localize(millisec)
{
  var d = new Date(millisec);
  document.write(d.toString());
}

然后在您的视图中,当您需要显示时间时,请调用辅助方法:

<span><%= localize(@my_record.time) %></span>