2013-10-10 27 views
3

我正在從rails 2.3升級到3.2,並且我在日期轉換時遇到了麻煩。ActiveRecord從rails 2.3到3.2的日期轉換

在rails 2.3中,日期轉換的默認格式是mm/dd/yyyy,當我將這種格式的字符串分配給active_record模型時,它會正確轉換日期。例如,

我有軌3.2

user.registered_on = "10/03/2013" #=> March 10, 2013 

用戶對象(active_record對象)和

在軌2.3

user.registered_on = "10/03/2013" #=> Oct 3, 2013 

但同樣的事情,如何解決這一問題?

我已經嘗試在初始化文件之一中設置Date :: DATE_FORMATS [:default] ='%m /%d /%Y',但這沒有任何好處。

我甚至已經爲日期設置了語言環境,但那不起作用。重現此問題

一個完美的方式是:

  1. 創建兩個應用,一個在軌2.3.x版本的版本和在軌3.2.x中的其他版本。

  2. 使用至少一個日期時間字段在每個應用程序中創建一個模型。

  3. 爲兩個應用程序創建並遷移數據庫。

  4. 從每個應用程序中的終端轉到Rails控制檯。

  5. 創建一個active_record模型對象並將此「10/3/2013」​​字符串分配給日期時間字段,並查看結果都是不同的日期。

我只是需要一個解決方案,如何解決這一日期或日期時間轉換,使之同軌2.3

+0

我依靠rails4但我認爲,這不應該改變什麼:'Date.parse「2013年3月10日」 =>週四,10月3日2013'確保沒有插件或的寶石,打破這種行爲? – phoet

+0

你試過這個嗎? http://stackoverflow.com/questions/1610485/default-date-format-in-rails-need-it-to-be-ddmmyyyy#answer-8816063 –

+0

我有一個tztime插件。這可能是一個問題嗎?但是這個插件已經被移植到了rails 2.3應用程序中,所以根據我的說法,這不應該打破這種行爲。此外,我已經檢查了該插件中的代碼,並沒有看到任何可以改變這種行爲的代碼。 –

回答

0

我猜你升級你的Ruby版本?

$ ruby --version 
ruby 1.8.7 
$ ruby -r date -e "puts Date.parse('10/3/2013').month" 
10 

$ ruby --version 
ruby 1.9.3p327 
$ ruby -r date-e "puts Date.parse('10/3/2013').month" 
3 

Ruby 1.87 vs 1.92 Date.parse

+0

是的,我已經升級了紅寶石版本。但是在紅寶石升級之後如何保持這種相同的行爲呢? –