根据用户的时区获取事件而不是DB + Rails4

时间:2017-04-07 05:52:12

标签: ruby-on-rails postgresql datetime ruby-on-rails-4 timezone

我有三个活动。它们包含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。我们可以使用它。

2 个答案:

答案 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。

相关问题