【问题标题】:How to manage different time_zones in ruby on rails如何在 ruby​​ on rails 中管理不同的 time_zones
【发布时间】:2016-06-21 22:59:14
【问题描述】:

用户的属性为start_timeend_timetime_zone

我只保存时间而不是日期和用户 time_zone 例如

start_time => "09:00"
end_time => "02:00"
time_zone => "Samoa"

根据给定的time_zone,仅在给定start_timeend_time 的情况下调用用户。我如何检查这个?

我的研究,我发现了这个

in_time_zone('Eastern Time (US & Canada)')

我想根据time_zonestart_timeend_time 检查用户是否可用

【问题讨论】:

  • 这个时区是否适用于整个应用程序?
  • 不不......这取决于用户时间 zeon
  • 您的问题是什么?请说出可回答的问题,以便我们回答。
  • 我更新了我的问题。我想根据 time_zone 的 start_time 和 end_time 检查用户是否可用
  • 已更新.......................

标签: ruby-on-rails ruby time timezone timestamp


【解决方案1】:
server_tz = Time.zone # zone on server
server_now = server_tz.now # time on server right now

Time.use_zone(time_zone) do # ⇐ user’s time zone, 'Samoa'
  server_start, server_end = %i|start_time end_time|.map do |t|
    # ⇓ parse in user time zone and convert to server tz
    Time.zone.parse("#{Date.today} #{t}").in_time_zone(server_tz)
  end
  # ⇓ use case-triple-equal to check if time is in between
  (server_start..server_end) === server_now
end

【讨论】:

  • 谢谢 :) 你能详细说明一下吗
  • 我在代码中添加了 cmets,解释了每一步发生了什么。您希望进一步阐述什么?
  • 为什么要获取服务器时间...我们的目的只是检查用户时间
  • 不能只检查用户时间,应该检查/比较与某事。由于您有不同时区的用户,因此将其与标准时间进行比较是有意义的。我选择了服务器时间作为标准,因为您没有说明您的初衷是什么。随意比较你想要的任何东西,我只是展示了一个常见的模式。
  • Thankuuuuu :) 我明白了 :)
猜你喜欢
  • 2017-02-25
  • 1970-01-01
  • 2010-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多