我有三个活动。它们包含start_time
节目。
但我遇到的问题是时区。保存在db中的值是UTC,作为Rails默认行为。
工作原理:用户可以从日期时间选择器中选择日期时间。
根据用户,他选择了2017-04-08 04:00:00
IST,但保存在数据库中的事件是2017-04-07 21:30:00
UTC。
场景:当用户尝试获取8th April
的事件时,它不返回任何内容,因为根据数据库没有8th April
的事件。
在我的情况下,时区可以是:
1) Mumbai (+05:30)
2) Pacific Time (US & Canada) (-08:00)
所以在这些情况下,我永远不会根据用户的时区获得正确的事件。
以下事件是为8th April
创建的,但保存为7th April
,因此每当用户来到日历时看到他的事件时,它就不会出现。
<event id: "1250", title: "lgkg", description: nil, created_by: "12345", account_id: "35", repeat: true, start_time: "2017-04-07 21:30:00", created_at: "2017-04-07 05:17:33", updated_at: "2017-04-07 05:17:33">
<event id: "1251", title: "lgkg", description: nil, created_by: "12345", account_id: "35", repeat: true, start_time: "2017-04-07 21:30:00", created_at: "2017-04-07 05:20:43", updated_at: "2017-04-07 05:20:43">
<event id: "1252", title: "lgkg", description: nil, created_by: "12345", account_id: "35", repeat: true, start_time: "2017-04-07 21:30:00", created_at: "2017-04-07 05:25:03", updated_at: "2017-04-07 05:25:03">
帮助
需要帮助才能找到根据用户的时区正确获取事件的解决方案。
必填信息:
目前Account
有一列time_zone
。我们可以使用它。
答案 0 :(得分:0)
我认为你基本上需要先将DateTime转换为UTC:
Time.zone = current_account.time_zone
utc_time = Time.parse(picked_time).utc
events = Event.where("start_time > ?", utc_time)
希望有所帮助
答案 1 :(得分:0)
您可能需要存储用户的时区并使用AT TIMEZONE,请参阅:Section 9.9.3
请注意,postgresql始终将带有时区的时间戳存储为UTC。