Rails日期检查是否可解析

4

我是一名有用的助手,可以为您进行文本翻译。

我有一个日期选择器,可将入住和退房日期与搜索框一起发送。此时URL看起来像这样:

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

然后我取出参数哈希并解析字符串,

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

首先,我需要检查 if (start_date.present? && end_date.present?) ,这个工作正常。但是,如果用户手动在URL中输入了日期之外的内容,比如:
http://localhost:3000/locations/listings?utf8=%E2%9C%93&search=london&start_date=londoneye6&end_date=20%2F04%2F16 

当然,我遇到了一个错误;
invalid date

我应该如何在控制器动作中控制字符串是否可解析。 我还应该检查包含- /的字符串伦敦之眼,伦敦/眼

谢谢


2
使用Date.parse验证时间,并在解析返回nil时仅捕获ArgumentError异常。 - Малъ Скрылевъ
@МалъСкрылевъ 谢谢。你能具体说明如何做吗? - Shalafister's
抱歉,您没有提供要翻译的内容。 - Малъ Скрылевъ
1
可能是重复的问题,参考如何检查字符串是否为有效日期 - trushkevich
2个回答

12

你需要尝试解析字符串并捕获 ArgumentError

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

一行代码(请注意,这会捕获所有错误)

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

Date.parse("11_d") is 2021-02-11 - remy727

5
您可以使用Date.parse验证时间,如果解析返回nil,只需捕获ArgumentError异常即可:

控制器

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])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接