javascript - 如何在 Rails 中正确管理用户的时区?

标签 javascript ruby-on-rails ruby timezone

我知道有很多 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)?

灵感来自 ThoughtBot's articlethis question

最佳答案

您不会遗漏任何重要信息。每种语言都有不同种类和数量的花里胡哨装饰其基本部分。 “ECMAScript Internationalization API”(使您能够编写 Intl.DateTimeFormat().resolvedOptions().timeZone)的规范直到 2012 年才引入,比 JavaScript 首次构想晚了几年。

在后端有点类似,Rails 框架提供了自己的内置 API,允许您创建 Time 实例,并增加了 TZInfo gem 的准确性和功能感谢 Rails 的 ActiveSupport::TimeZone 包装器。您甚至不会偏离您在 Ruby 中的习惯,直观地调用 Time 上的 TimeTZInfo 方法在 Rails 中。

您上面编写的代码在技术上依赖于 gem。 Rails 是一颗 gem !也许您要描述的是我们是应该使用我们的语言和框架自带的库,还是获取新的库。这种差异并不像图书馆最初的可靠性那么重要。所以你不会错过任何东西!那里只是一片丛林:)

关于javascript - 如何在 Rails 中正确管理用户的时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57769384/

相关文章:

ruby-on-rails - 在 Rails 环境之外测试(使用 RSpec) Controller

javascript - 外部样式表不会覆盖 Bootstrap

ruby-on-rails - 错误 : Exhausted all sources trying to fetch version 'latest' of RVM

HTML 和 Ruby on Rails - 将 <br/> 标记显示为换行符,但将其他标记显示为字符串

ruby-on-rails - 在 Ruby 中(安全地)解释用户输入的表达式

ruby-on-rails - rails/ ruby : Get Last 4 Digits of Credit Card

ruby-on-rails - rails 中不兼容的字符编码 - 如何明智地失败/跳过?

javascript - Tooltipster 悬停选择和选项在 IE 中不起作用

javascript 正则表达式 驼峰式

javascript - iframe 不会在桌面上的页面上居中