如何检查日期是否为ruby中的有效日期。许多方法只检查范围。但是,我需要检查日期 一周检查日期是否有效。对于Ex:
20 Jul 2016 Wed --> Valid
20 Jul 2016 Mon --> Not-Valid
如何在ruby中执行此操作?
答案 0 :(得分:1)
我不是假装有史以来最好的解决方案,但这应该有用。
def valid_date?(date)
Date.parse(date).strftime("%d %b %Y %a") == date
end
[55] pry(main)> valid_date?("20 Jul 2016 Wed")
=> true
[56] pry(main)> valid_date?("20 Jul 2016 Mon")
=> false
[57] pry(main)>
如果您有多种格式,可以将格式作为第二个参数传递
def valid_date?(date, fmt)
Date.parse(date).strftime(fmt) == date
end
=> :valid_date?
[59] pry(main)> valid_date?("20 Jul 2016 Wed", "%d %b %Y %a")
=> true
希望这会有所帮助。
<强>更新强>
正如我在评论中提到的,方法名称与现有方法valid_date?
重叠因此,您可以重命名自定义方法
def date_valid?(date, fmt)
Date.parse(date).strftime(fmt) == date
end
[2] pry(main)> date_valid?("20 Jul 2016 Wed", "%d %b %Y %a")
=> true
答案 1 :(得分:1)
出于好奇:
dates = ['20 Jul 2016 Wed', '20 Jul 2016 Mon']
dates.map do |date|
Date.parse(date).public_send(
Date.instance_methods.detect do |m|
m.to_s =~ /\A#{date[-3..-1].downcase}.*day\?\z/
end)
end
#⇒ [ true, false ]
答案 2 :(得分:1)
require 'date'
dates = ['20 Jul 2016 Wed', '20 Jul 2016 Mon']
dates.select do |s|
d = Date.strptime(s[0,11], "%d %b %Y") rescue nil
d.nil? ? false : (Date::ABBR_DAYNAMES[d.wday] == s[-3,3])
end
#=> ["20 Jul 2016 Wed"]
这将读取“选择表示有效日期的字符串'dd mmm yyyy'
,其星期几与字符串的最后三个字符所给出的星期几相匹配”。