我知道有很多 gem 可以完成这项工作,但我认为使用整个 gem 来完成如此简单的任务太过分了。
我发现 js 做起来很简单:
Intl.DateTimeFormat().resolvedOptions().timeZone
答案是类似"Europe/Moscow"
的字符串。
我们可以很容易地把它保存到数据库
create_table :users do |t|
t.string :time_zone, default: "UTC"
...
end
并像这样设置用户的时区:
# app/controllers/application_controller.rb
around_action :set_time_zone, if: :current_user
private
def set_time_zone(&block)
Time.use_zone(current_user.time_zone, &block)
end
所以我的问题是:我是否遗漏了一些重要的东西(为什么要使用这些 gems)或者我可以像上面写的那样(没有任何 gems)?
最佳答案
您不会遗漏任何重要信息。每种语言都有不同种类和数量的花里胡哨装饰其基本部分。 “ECMAScript Internationalization API”(使您能够编写 Intl.DateTimeFormat().resolvedOptions().timeZone
)的规范直到 2012 年才引入,比 JavaScript 首次构想晚了几年。
在后端有点类似,Rails 框架提供了自己的内置 API,允许您创建 Time
实例,并增加了 TZInfo
gem 的准确性和功能感谢 Rails 的 ActiveSupport::TimeZone
包装器。您甚至不会偏离您在 Ruby 中的习惯,直观地调用 Time
上的 Time
和 TZInfo
方法在 Rails 中。
您上面编写的代码在技术上依赖于 gem。 Rails 是一颗 gem !也许您要描述的是我们是应该使用我们的语言和框架自带的库,还是获取新的库。这种差异并不像图书馆最初的可靠性那么重要。所以你不会错过任何东西!那里只是一片丛林:)
关于javascript - 如何在 Rails 中正确管理用户的时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57769384/