Users input date as whatever they like, today they input 2023-4-28, tomorrow they forget what format they use before, they then input 4/29/2023.  Other users may input 30/4/2023,  or  04/30/2023, or 30-4-2023 or 04-30-2023 or just input month only 2023/4,  or just input year only 2023

 

https://transparentgov.net:3200/googlemaps141/default?layer_id=0&layer=NYPAD2_Easement&center_lat=41.18333803421051&center_long=-73.7791579159306&center_zoom=13&url=https%3A%2F%2Fservices6.arcgis.com%2FDZHaqZm9cxOD4CWM%2FArcGIS%2Frest%2Fservices%2FNYPAD2_Easement%2FFeatureServer&panto=0&overlayType=overlayType_none&select_field=14&select_fieldvalue=-1&distinctorgroupby=groupby

 

 

https://transparentgov.net:3200/googlemaps141/default?layer_id=0&layer=NYPAD_2_Fee&center_lat=43.07607440739406&center_long=-74.21026135147456&center_zoom=19&url=https%3A%2F%2Fservices6.arcgis.com%2FDZHaqZm9cxOD4CWM%2FArcGIS%2Frest%2Fservices%2FNYPAD_2_Fee%2FFeatureServer&panto=0&overlayType=overlayType_none&select_field=14&select_fieldvalue=-1&distinctorgroupby=groupby

 

This exactly happen in New York State protected land layers. 

Above example, source date column (Src_date) is text field, char(15). Not  esri 'date' type. This is very common in other states and county as well. They collect data from different source, date format is totally different is not unusual. 

 

Use regex to filter out all possible date format

test regex here :   https://www.debuggex.com/   or      https://regex101.com

JavaScript Regex Cheatsheet is here

https://www.debuggex.com/cheatsheet/regex/javascript

 

 

1) find 2023-10-04  

 use regex \d{4}-\d{2}-\d{2}

python function use    date_time_obj = datetime.strptime(raw_date_string, %d/%m/%Y) (1 digital month ok,if with delimit)

https://regex101.com/r/ETRxIg/2

 

https://www.debuggex.com/r/pF2sOvYyZldizz3Z

 

 

 

 

2) find  31/04/2023 or 31/4/2023     

use regex     (0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/\d{4} 

 

python function use   date_time_obj = datetime.strptime(raw_date_string, %d/%m/%Y) (1 digital month ok,if with delimit)

https://regex101.com/r/ETRxIg/1

 

https://www.debuggex.com/r/OGAZSl0I6qsz1992

 

 

3)   find  4/3/2020 or  04/03/2020     

 use regex   ^ (0?[1-9]|1[012])\/(0?[1-9]|[12][0-9]|3[01])\/\d{4}

python function use    date_time_obj = datetime.strptime(raw_date_string, %m/%d/%Y) (1 digital month ok,if with delimit)

https://regex101.com/r/PTGoVi/2

 

 

https://www.debuggex.com/r/enm2dZa4eO5ql4es

 

 

 4)    find  2021/11/08    or   2021/1/8 

use regex    \d{4}\/(0?[1-9]|1[012])\/(0?[1-9]|[12][0-9]|3[01]) 

python function use  date_time_obj = datetime.strptime(raw_date_string, %Y/%m/%d)

 

https://regex101.com/r/IJALbe/1

 

 

 

https://www.debuggex.com/r/28Z918C_CsmfI6KK

 

 

 

5) find 2023     year only 

           use regex   ^\d{4}$ 

python function use    date_time_obj = datetime.strptime(raw_date_string, '%Y')   

 

https://regex101.com/r/PseMzJ/1

 

https://www.debuggex.com/r/t3Zch5QfIDrWnRnf

 

 

 

Final regex table

Final python script 

by

Please log in or register