我需要测试一个特定的日期数组,以确保它们的格式正确,但是我不能使用“解析”#39;因为,如果我这样做,那么不正确的日期就会被整理出来。例如,如果我的月份日期不正确,那么它会增加一年并将月份设置为1。
我的代码从SQL查询中提取日期:
table_birth_dates = self.class.connection.execute("SELECT birth_date FROM #{temp_table_name}").values.flatten
[
[0] "1980-30-54",
[1] "1980-30-54",
[2] "2020-09-10",
[3] "1890-10-30"
]
yr = 1900
year_test = table_birth_dates.select{|d| Date.parse(d).year < yr}
这现在给了我一个ArgumentError: invalid date
。
我想过使用:
splitted_birth_date = table_birth_dates.first.split("-")
splitted_birth_date.first.to_i > 1900?
但如果我试图遍历我的所有日期,我就无法通过拆分来操纵任何事情:
table_birth_dates.each do |birth_date|
birth_date.split("-")
end
我该怎么办?
答案 0 :(得分:0)
我需要测试一个特定的日期数组,以确保它们在 格式正确......
如果您收到错误,则表示日期不正确,您可以挽救该错误,并根据该日期执行任何操作以使其有效或等等。
table_birth_dates.each do |birth_date|
begin
if Date.parse(d).year < yr
# do smth
end
rescue ArgumentError => e
# do smth with `d`
end
end
答案 1 :(得分:0)
您可以将select
和split
方法结合在一起:
table_birth_dates.select { |d| d.split('-').first.to_i < 1900 }
#=> ["1890-10-30"]