【问题标题】:How can I show different time depending on the user's local time?如何根据用户的当地时间显示不同的时间?
【发布时间】:2013-02-17 11:15:44
【问题描述】:

我确实有这样的设置

config/application.rb

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

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

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

附:我看过这个,但它似乎只有当用户是 Rails 应用程序的成员时才有效。
它不会知道他们的当地时间,除非看到的人确实注册并设置了他的当地时间。

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

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

【问题讨论】:

  • 也许这颗宝石github.com/cleverua/client_timezone_detection可以帮助你。
  • 这就是我想要的。谢谢:)
  • @SybariteManoj 我已经安装了它并将这个 <%= javascript_include_tz_detection %> 放在 layouts/application.rb 中
  • 它对你有用吗?
  • @SybariteManoj 不。即使我更改操作系统的时区,它也会显示相同的时间:(

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


【解决方案1】:

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

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

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());
}

然后在你的视图中,当你需要显示时间的时候,调用helper方法:

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

【讨论】:

    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多