【发布时间】:2015-10-19 22:56:14
【问题描述】:
我的应用程序中的时区和从不同区域导入日期时遇到问题,这些区域适用于 Availability 模型。
在 UI 端,我有引导 datetimepicker 并创建 params[start_time] 但它没有与之关联的特定区域。
可用性属于具有时区的Venue。我一直想知道是否有办法可以做类似的事情:
# Explicitly set zone based on Venue.time_zone
start_date_zoned = set_time_zone_to(param[:start_date], Venue.time_zone)
# Convert start_date to UTC to standardize with DB default
start_date_zoned.utc
我需要进行此转换的原因是因为我在Availabilities 上有这个范围,但由于区域关闭而无法正确返回:
scope :after_now, -> {where{start_time >= Time.zone.now }}
# Maybe Time.zone.now isn't right?
例如,如果我从不同时区的 2 个用户导入了 2 个不同的时间
- 开始日期:2015 年 10 月 19 日星期一 22:00:00“东部时间(美国和加拿大)”
- 开始日期:2015 年 10 月 19 日星期一 22:00:00“太平洋时间(美国和加拿大)”
当该日期时间通过参数时,它没有区域,只有日期,它存储为:Mon, 19 Oct 2015 22:00:00 UTC
当我执行 Availabilities.after_now 并说它当前是 21:00 UTC 时,两个结果都会出现,但实际上,鉴于这两个导入的可用性应该是 EST 和 PST(然后转换为正确的 UTC 值),它们可能或者实际上可能不是after_now
有没有办法做到这一点,我有什么意义吗?
【问题讨论】:
-
这是一篇旧博文,但涵盖了很多关于 Rails/时区的知识:elabs.se/blog/36-working-with-time-zones-in-ruby-on-rails
标签: ruby-on-rails ruby datetime ruby-on-rails-4