2014-05-22 70 views
3

我查詢這樣的結果:查詢postres與導軌和時區

@logs.where("extract(dow from created_at at time zone ?) = ?", "America/New_York", day_of_week) 

,但它不工作。 (我也嘗試過在這裏使用「Time.zone.tzinfo.identifier」,但在這裏用於測試和清晰。)例如,某人可能在東部時間10:30發佈帖子,但由於它存儲在UTC中,它不會顯示在包含它的查詢中。

我開始了新的問題,因爲我從這裏得到這個答案,它顯然並沒有爲我工作,即使它有一個公認的答案: handling rails + postgres and timezones

有什麼我做錯了用這種方法?還有其他更新或更好的方法嗎?

更新的信息:

created_at存儲爲日期時間。我的時區設置仍然是UTC,但我想與「America/New_York」區的帖子,其中應該仍然工作。通過不起作用,我的意思是我會查詢15日和一些帖子將返回,但由於UTC的差異,一些15日當天晚些時候仍然會在16日返回。包含它的查詢列表在代碼塊上方。我試圖在時區「America/New_York」中從created_at處獲取dow。

+0

'created_at'的確切數據類型?你的時區設置? '它不工作' - *怎麼*完全? 「包含它的查詢」的確切SQL? [此相關答案可能有幫助。](http://stackoverflow.com/questions/9571392/ignoring-timezones-altogether-in-rails-and-postgresql/9576170#9576170) –

+0

好的,更新的信息。 – Scott

回答

1

這是我寫的關於導軌和時區的博客文章,您可能會發現它有幫助嗎? http://jessehouse.com/blog/2013/11/15/working-with-timezones-and-ruby-on-rails/

嘗試運行您的查詢像這樣

Time.use_zone("Eastern Time (US & Canada)") do 
    start_at = (Date.current - 1.day).beginning_of_day 
    end_at = start_at.end_of_day 
    @logs_from_yesterday = Log.where("created_at BETWEEN ? AND ?", start_at, end_at) 
end 

Rails會自動抵消日期時間過濾器,以在use_zoneDate.current指定的時區是時區感知(別名Time.zone.now.to_date

+1

謝謝你,救了我的命! –