2012-09-03 37 views
0

我試圖找回這一天在我的模型的所有條目:created_at在聲明和時區

where('date(created_at) = date(?)', Date.today) 

但是,由於時區的(我的本地時間爲UTC + 2),我不沒有預期的結果。例如,如果在午夜後一分鐘創建了一個條目,則在數據庫中它將存儲在22:01(所以不是「Date.today」)。

有沒有辦法做到這一點?

編輯:

隨着網站的管理員,我想展示在我的本地時間「今天」條目的數量(這只是統計的目的!)。所以我想保持時間戳存儲在utc中,但在請求期間將它們轉換爲當地時區!

+0

使用before_filter設置正確的TimeZone? –

+0

是的:'before_filter do Time.zone = ActiveSupport :: TimeZone.new('Paris')end' –

+0

嘗試'TimeZone.new('Paris')'然後'Time.zone.now'獲取更改。 –

回答

0

您可以通過多種方式設置正確的時區。一個是在這個答案說明:

https://stackoverflow.com/a/6118837/567126

添加以下內容application.rb中工作

config.time_zone = '東部時間(美國&加拿大)'

+1

activerecord在UTC中存儲時間戳不是一件好事嗎? –

+0

是的,我認爲你是對的。時間戳應該以標準化的方式存儲。 – spaudanjo

+0

但另一方面,ActiveRecord似乎將默認時間戳存儲在本地時區中:http://api.rubyonrails.org/classes/ActiveRecord/Timestamp.html – spaudanjo

0
where('date(created_at) = ?', Time.zone.now.to_date) 
0

數據庫中的時間應該存儲爲UTC。通過這種方式,當您創建全球網站時,您可以爲每個用戶提供他們自己的時區。

這是用戶界面(視圖)責任在用戶的本地時區中顯示時間。

爲了您其中你應該使用Time.now.utc 這樣,你與公共UTC搜索數據庫。