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¢er_lat=41.18333803421051¢er_long=-73.7791579159306¢er_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¢er_lat=43.07607440739406¢er_long=-74.21026135147456¢er_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