问题描述
我正在编写一个自定义 DateTime 方法来获取 current web viewer
的时区并将所有时间视图设置为他/她的时区。
我如何获取本地时区
# index.html.erb
<%= get_time( getTimeZone(),entry.created_at) %> # getTimeZone() => "Asia/Shanghai",wrong usecase
<%= get_time("Asia/Shanghai",entry.created_at) %> # works like charm
<script>
function getTimeZone() {
return Intl.DateTimeFormat().resolvedOptions().timeZone
}
</script>
下面我简单地将数据库UCT时间转换为用户本地时区,然后计算ago
时差。
# application_helper.rb
def get_time(user_zone,created_at)
user_Now = Time.find_zone(user_zone).Now
created_at_local = created_at.in_time_zone(user_zone)
difference = user_Now - created_at_local
if 60 > difference
difference.round.to_s + "s"
elsif 3600 > difference
(difference / 1.minute).round.to_s + "m"
elsif 86400 > difference
(difference / 1.hour).round.to_s + "h"
else
created_at_local.strftime("%b %d,%Y")
end
end
如何连接两者?或者我如何在 JS 中实现 rails 方法?
我刚刚意识到 rails 可以逃避正斜杠??我认为它只是在路线上很奇怪。我尝试了所有形式的替代,但都无效。
"Asia/Shanghai" => ""
有任何位移吗?
解决方法
您可以使用 JavaScript 将 TimeZone
保存到 cookie,然后在 Rails 中读取 cookie 以获取 TimeZone
。 Example code
还有一个名为 Local Time 的宝石,您可能想看看。