問題描述
是什麼導致了這個無效的日期錯誤? (What is causing this invalid date error?)
在這行代碼上:
@note.date = Date.strptime(params[:custom_date], '%d‑%m‑%Y') unless params[:custom_date].blank?
我收到此錯誤:
ArgumentError: invalid date
/usr/ruby1.9.2/lib/ruby/1.9.1/date.rb:1022
參數如下:
{
"commit" => "Create",
"utf8" => "\342\234\223",
"authenticity_token" => "RKYZNmRaElg/hT5tlmLcqnstnOapdhiaWmDcjNDtSOI=",
"action" => "create",
"note" => { "name"=>"note1", "detail"=>"detail" },
"controller" => "notes",
"custom_date" => "03‑03‑2010"
}
是什麼導致了這個錯誤?感謝閱讀。
參考解法
方法 1:
The parameters you are getting is
{"commit"=>"Create",
"utf8"=>"\342\234\223",
"authenticity_token"=>"RKYZNmRaElg/hT5tlmLcqnstnOapdhiaWmDcjNDtSOI=",
"action"=>"create",
"note"=>
{"name"=>"note1",
"detail"=>"detail"},
"controller"=>"notes",
"custom_date"=>"03‑03‑2010"}
Hence we can clearly make out
its not params[:custom_date]
but it is params['custom_date']
UPDATE
Date.strptime method follows a particular pattern.For instance
str = "01‑12‑2010" #DD‑MM‑YYYY
then use
Date.strptime(str,"%d‑%m‑%Y")
but if
str = "2010‑12‑01" #YYYY‑MM‑DD
then use
Date.strptime(str,"%Y‑%m‑%d")
方法 2:
Use to_date
method to format params[:custom_date]
@note.date = (Date.strptime(params[:custom_date], '%d‑%m‑%Y')).to_date unless params[:custom_date].blank?
Thanks
方法 3:
I'm not able to reproduce this error on ruby 1.9.2 or ruby 1.8.7
I suspect that your param[:custom_date] changes between the log output u've shown and the Date.strptime call.
Rails symbolizes the params keys so it's possible to read them as params[:custom_date]
(by ben、Rohit、Anubhaw、Aditya Sanghi)