2014-06-18 33 views
0

當我在rails窗體中使用f.datetime_select時,它會以UTC(例如UTC)向我的控制器返回一個日期時間。由f.datetime_select返回的日期時間轉換時區

2014-06-18T11:00:00+00:00 

我的本地時區設置爲我的application.rb中文件中指定的墨爾本(+10):

config.time_zone = 'Melbourne' 

所以,當我取回從我的數據庫datatimes將自動轉換到墨爾本( +10)時區,例如

2014-06-17 19:00:00 +1000 

我想通過比較與f.datetime_select在我的數據庫字段返回的日期時間。我怎樣才能做到這一點?

即如何更改由f.datetime返回的日期時間的時區而不更改實際時間而選擇「墨爾本」(+10)?即轉換:

2014-06-18T11:00:00+00:00 

2014-06-18T11:00:00+10:00 

回答

0

存儲在數據庫中的所有日期在UTC時間。所以當你的應用程序從'params'中獲得新的日期時,你基本上有兩種選擇:將它保存到ActiveRecord模型,在此期間,AR將執行所有決定什麼時區意義的重組。
如果您不想將數據保存到模型中,則必須自己處理。日期選擇控件在params散列中只返回3個特殊格式的字符串。 假設我在表單'birthdate'中命名了字段。控制器將獲得類似:

"<your_model_name>" => {... , "birthdate(3i)" => "<day>", "birthdate(2i)" => "<month>", "birthdate(1i)" => "<year>", ...} 

所以,你可以處理這些信息是這樣的:

Time.zone.parse("#{ params[:model]['birthdate(3i)'] }-#{ params[:model]['birthdate(2i)'] }-#{ params[:model]['birthdate(1i)'] }") 

,是的,我知道它看起來難看,一些研究後,我驚訝的是,沒有任何'開箱'解決方案)

+0

感謝這是一個非常明確和有益的迴應。我預計可能會有一些開箱即用的解決方案,但這種方式完美無缺。再次感謝。 – user3711600