我在命名範圍中遇到日期比較問題。我試圖根據它的開始和結束日期來確定事件是否是最新的。以下是我使用哪種作品的命名範圍,但不適用於具有相同開始和結束日期的事件。在Rails中進行日期比較
named_scope :date_current, :conditions => ["Date(start_date) <= ? AND Date(end_date) >= ?", Time.now, Time.now]
這將返回以下的記錄,但它應該返回兩個記錄,沒有之一......
>> Event.date_current
=> [#<Event id: 2161, start_date: "2010-02-15 00:00:00", end_date: "2010-02-21 00:00:00", ...]
什麼它沒有返回本以及
>> Event.find(:last)
=> #<Event id: 2671, start_date: "2010-02-16 00:00:00", end_date: "2010-02-16 00:00:00", ...>
服務器時間似乎在UTC,我認爲這些條目以UTC存儲在數據庫中。任何想法,我做錯了什麼或嘗試什麼?
謝謝!
嗨拉里K.我昨天發現的是,第二個事件,我想要顯示DID顯示一天中的大部分時間,並且在UTC時間過去後似乎不再是當前事件。例如,從美國東部標準時間晚上8點開始,該事件不再是最新的,但是在美國東部時間下午5點,這確實使我認爲這是一個時區問題。以下是我的本地機器上查詢的開發日誌輸出: SELECT * FROM'events' WHERE((Date(start_date)<='2010-02-17 10:14:10'AND Date(end_date)> ='2010-02-17 10:14:10')AND(events.deleted_at IS NULL OR events.deleted_at>'2010-02-17 15:14:50')) – aressidi 2010-02-17 15:28:56
我已更新date_current named_scope以查看現在這樣: named_scope:date_current,:conditions => [「Date(start_date)<=?AND Date(end_date)> =?」,Time.now.time_zone(「UTC」).to_date.to_s,Time。 now.in_time_zone( 「UTC」)。TO_DATE。to_s 這會在日誌中產生以下內容: SELECT * FROM'events' WHERE((Date(start_date)<='2010-02-17'AND Date(end_date)> ='2010-02-17') AND(events.deleted_at IS NULL OR events.deleted_at>'2010-02-17 15:22:44')) 也許時區需要爲+5小時而不是-5小時才能工作...... – aressidi 2010-02-17 15:30:52