2011-06-19 29 views
4

我使用的是datepicker在我的表單上插入日期,這當然會將日期作爲字符串返回給控制器。 的問題是,當我嘗試這個字符串轉換日期,我得到一個錯誤「無效的日期」日期轉換問題,使用rails 3.0.7和ruby 1.9.2

Date.parse(params[:abc][:date])

要驗證,如果我這樣做是正確的,我寫了下面的Ruby程序:

string_date = "06/18/2011"
date = Date.parse(string_date)
puts date

這工作完全正常。但是當我在rails控制器中嘗試同樣的事情時,它會給出無效的日期錯誤。

請大家幫忙。

+0

其模型表單,其中:abc是表單對象,date是表單中的日期字段(jquery datepicker) – rb512

+0

params [:abc] [:date]保存從datepicker中選擇的日期值。例如,如果我選擇今天的日期(2011年6月21日),params [:abc] [:date]將包含字符串「06/21/2011」。 我試圖從我的控制器打印這個日期值,並注意到兩件事。當我在'puts puts params [:abc] [:date]'時輸出正確的值,並且當值實際存儲在表abc中時它打印正確的值,其空白。 – rb512

回答

6

當我做這在我的Rails 3.1控制檯:

date = Date.parse("06/18/2011") 

我得到一個 「引發ArgumentError:無效的日期」 異常。然而,它可以很好地與ISO-8601 date

date = Date.parse('2011-06-18') 

所以也許你有一個語言環境問題。您的腳本可能會使用您的標準語言環境設置(這可能是由日期格式判斷的某些美國語言環境),但您的服務器可能使用其他內容。

嘗試添加該改變的jQuery datepicker date format的東西標準和明確的:

dateFormat: 'yy-mm-dd' 

的日期選擇器的選項。日期選擇器的默認值爲'mm/dd/yy',而Ruby的Date class似乎並不喜歡它,沒有特殊的區域設置。

+0

太棒了,它的工作! 謝謝@mu太短! – rb512

+0

@rrb:對不起,我應該早點考慮「格式和區域設置」問題。但是,嘿,固定是固定的,現在你可以做更多有趣的事情。你可能最好在內部使用ISO日期格式(總是),並且只在邊緣將該格式轉換爲其他格式並將其轉換爲其他格式。 –

+0

比從未更好遲到:),謝謝! 嘿,你可以請看看http://stackoverflow.com/questions/6443751/issues-with-getting-paperclip-to-play-nice-with-heroku-and-s3-using-rails-3 -0-7 我對heroku,回形針和亞馬遜s3有一些問題 – rb512