Skip to content

Instantly share code, notes, and snippets.

@andreimerlescu
Created July 5, 2020 19:09
Show Gist options
  • Save andreimerlescu/3c286bf9485af14c0e6566382e544d55 to your computer and use it in GitHub Desktop.
Save andreimerlescu/3c286bf9485af14c0e6566382e544d55 to your computer and use it in GitHub Desktop.
REGEX_1 = /(\d{1,2})[st|nd|rd|th]?{2}\s{1}(January|Jan|February|Feb|March|Mar|April|Apr|May|June|Jun|July|Jul|August|Aug|September|Sep|October|Oct|November|Nov|December|Dec),?\s(\d{2,4})/
REGEX_2 = /(January|Jan|February|Feb|March|Mar|April|Apr|May|June|Jun|July|Jul|August|Aug|September|Sep|October|Oct|November|Nov|December|Dec)\s{1}(0\d{1}|\d{1,2})[st|nd|rd|th]{2}?(,?)\s(\d{2,4})/
REGEX_3 = /(0\d{1}|\d{1}|1\d{1})\/(0\d{1}|\d{1}|1\d{1})\/(\d{2,4})/
MONTH_STR_TO_NUM={
"JANUARY": 1,
"January": 1,
"Jan": 1,
"FEBRUARY": 2,
"February": 2,
"Feb": 2,
"MARCH": 3,
"March": 3,
"Mar": 3,
"APRIL": 4,
"April": 4,
"Apr": 4,
"MAY": 5,
"May": 5,
"JUNE": 6,
"June": 6,
"Jun": 6,
"JULY": 7,
"July": 7,
"Jul": 7,
"AUGUST": 8,
"August": 8,
"Aug": 8,
"SEPTEMBER": 9,
"September": 9,
"Sep": 9,
"OCTOBER": 10,
"October": 10,
"Oct": 10,
"NOVEMBER": 11,
"November": 11,
"Nov": 11,
"DECEMBER": 12,
"December": 12,
"Dec": 12
}
def match_to_date_set1(md)
return nil if md.nil?
dates = []
md.each do |dates_found|
month = MONTH_STR_TO_NUM[:"#{dates_found[1]}"]
day = dates_found[0].to_i
year = dates_found[2].to_i
begin
dates << Date.new(year, month, day)
rescue ArgumentError
begin
date_str = "#{year}/#{month}/#{day}"
d = Date.strptime(date_str, "%Y/%-m/%-d")
dates << d
rescue ArgumentError
# remap the variables and try again
month = Date::MONTHNAMES[MONTH_STR_TO_NUM[:"#{dates_found[1]}"]]
day = dates_found[2].to_i
year = "19#{dates_found[0].to_i}"
date_str = "#{month} #{day} #{year}"
dates << Date.parse(date_str)
end
end
end
return dates
end
def match_to_date_set2(md)
return nil if md.nil?
dates = []
md.each do |dates_found|
month = MONTH_STR_TO_NUM[:"#{dates_found[0]}"]
day = dates_found[1].to_i
year = dates_found[3]
begin
dates << Date.new(year, month, day)
rescue ArgumentError
begin
year = year.length == 2 ? "19#{year}" : year
dates << Date.new(year, month, day)
rescue ArgumentError
begin
month = Date::MONTHNAMES[MONTH_STR_TO_NUM[:"#{dates_found[0]}"]]
day = dates_found[1].to_i
year = dates_found[3].length == 2 ? "19#{dates_found[3]}" : dates_found[3]
date_str = "#{month} #{day} #{year}"
dates << Date.parse(date_str)
rescue ArgumentError
month = Date::MONTHNAMES[MONTH_STR_TO_NUM[:"#{dates_found[0]}"]]
day = dates_found[3].to_i
year = dates_found[1].length == 2 ? "19#{dates_found[1].to_i}" : dates_found[1].to_i
date_str = "#{month} #{day} #{year}"
dates << Date.parse(date_str)
end
end
end
end
return dates
end
def match_to_date_set3(md)
return nil if md.nil?
dates = []
md.each do |dates_found|
month = Date::MONTHNAMES[dates_found[0].to_i]
day = dates_found[1].to_i
year = dates_found[2]
date_str = "#{month} #{day} #{year}"
dates << Date.parse(date_str)
end
return dates
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment