在我的應用程序中,我有一個Person
模型。每個Person
都有一個屬性time_zone
,它指定了它們的默認時區。我也有一個Event
模型。每個Event
都有一個start_time
和end_time
時間戳,以UTC時間保存在Postgres數據庫中。Rails 3.1:查詢Postgres在時間範圍內的記錄
我需要創建一個查詢,查找特定人員在一天午夜和下午午夜之間發生的事件。控制器變量@todays_events
保存查詢的結果。
我採取這種方法的部分原因是我可能會讓其他時區的人員查看某人的事件列表。我希望他們看到一天的人會看到一天,而不是基於他們作爲觀察者的時區。
無論出於何種原因,我仍然在前一天在@todays_events.
的結果集中收到一些事件我的猜測是我將UTC時間戳與非UTC參數進行比較,或者沿着這些行進行比較。通常,只有在前一天晚上開始或結束的活動纔會顯示在今天的查詢結果列表中。
現在,我設置了:
@today = Time.now.in_time_zone(@person.time_zone).midnight.to_date
@tomorrow = (@today + 1.day).to_datetime
@today = @today.to_datetime
我的查詢是這樣的:
@todays_activities = @person.marks.where("(start_time >= ? AND start_time < ?) OR (end_time >= ? AND end_time < ?);", @today, @tomorrow, @today, @tomorrow).order("start_time DESC")
我應該如何改變這種做法,我只能保證收到從今天的結果(每@person.time_zone
在@todays_activities
查詢?
注:我存儲全時區字符串中的'@ person.time_zone'場,而不僅僅是抵消。 – Clay
違規事件之一在'start_time'的db表中具有以下內容:'2011-12-10 23:28:00'和'end_time':'2011-12-11 03:00:00' with'time_zone '東部時間(美國和加拿大)''。 – Clay