我正在尝试在Rails中使用TimeZones。
我有一个名为Event
的模型,它有datetime字段starts_at
和string字段timezone
。然而,我对管理这些日期的最佳实践有点困惑,因为我正在处理这些事件的日期,这些日期与应用程序的时区完全不同。
默认情况下,rails使用的是我的应用程序的时区,也就是CEST,所以默认情况下,当我保存一个事件的日期时,它使用这个时区。然而,99%的时间我们认为日期是根据我们在模型上设置时区的客户端来考虑的。所以在我们的时区设置它的默认值并不好。
我是否应该:
1.保持设置这些日期相对于我的时间,如starts_at
设置在CEST和解释到客户端的时间,如client_starts_at
。然而,这是令人困惑的,因为我们通常输入相对于客户端的时间而不是我们自己的时间的starts_at
。
1.做一些getter/setter来输入日期作为用户的时间。这避免了大部分问题,因为所有的东西都进入UTC。
1.配置模型或控制器以考虑Event
的timezone
字段,从而将每个记录starts_at
设置为正确的时区,然后将时区解释为local_starts_at
。
1.也许我最好把starts_at
分成两个字段,把date
和time
分开?
选项3或4似乎更好,但有没有人知道一个资源,因为这似乎是一个非常常见的问题。我也不确定我是否应该在模型级别上管理这些问题,或者在控制器中处理它。
谢谢
https://thoughtbot.com/blog/its-about-time-zones
1条答案
按热度按时间isr3a4wc1#
可以使用
in_time_zone
。无论它是如何存储的,您都将获得正确的时区。
你甚至可以覆盖基方法(不推荐):