Rails日期检查是否可解析

时间:2016-04-29 12:39:39

标签: ruby-on-rails string date parsing

我有一个日期时间选择器,可以发送签到和发送信息。结帐日期与搜索框。然后网址看起来像;

http://localhost:3000/locations/listings?utf8=%E2%9C%93&search=london&start_date=12%2F04%2F16&end_date=20%2F04%2F16

我接受params哈希并解析字符串

start_date = Date.parse(params[:start_date])
end_date = Date.parse(params[:end_date])

首先,我必须检查if (start_date.present? && end_date.present?),这样可以正常工作。

但是如果用户手动输入其他内容而不是日期到网址,例如;

http://localhost:3000/locations/listings?utf8=%E2%9C%93&search=london&start_date=londoneye6&end_date=20%2F04%2F16 

然后我当然得到一个错误;

invalid date

我应该如何控制字符串是否可以在控制器操作上解析。我还应该检查london-eye, london/eye字符串,其中包括- /

谢谢

2 个答案:

答案 0 :(得分:4)

您必须尝试解析字符串并解救ArgumentError

begin
   myDate = Date.parse("31-01-2016")
rescue ArgumentError
   # handle invalid date
end

一行(请注意,这会拯救所有错误)

myDate = Date.parse("31-01-2016") rescue nil

答案 1 :(得分:2)

您可以使用Date.parse验证时间,并在解析返回ArgumentError时隐藏nil例外:

<强>控制器

def param_date date
   Date.parse(date)
rescue ArgumentError
   nil
end

start_date = param_date(params[:start_date])
end_date = param_date(params[:end_date])