===================================================
 
 Qgis field calculator expression: 
 
           standardize_date( "Src_Date" )
 
 ------------------- python script for qgis only -------------------
 
from qgis.core import *
from qgis.gui import *
from datetime import datetime
import re
 
@qgsfunction(args='auto', group='Custom')
def standardize_date(text_field, feature, parent):
    
    #return re.sub('^2020/08/12$','999',text_field)  # test works
    #return re.sub('\d{4}/\d{2}/\d{2}','999',text_field)  # test works
    
    striped_raw_date_string = text_field.strip() 
 
# 1) find date format 2023-10-0
    result1 = re.findall('\d{4}-\d{2}-\d{2}',striped_raw_date_string) 
 
# 2) find date format 31/04/2023 or 31/4/2023  
    result2 = re.findall('(0?[1-9]|[12][0-9]|3[01])\/(0?[1-9]|1[012])\/\d{4}',striped_raw_date_string) 
 
    # 3) find date format 4/3/2020 or  04/03/2020   
    result3 = re.findall('^(0?[1-9]|1[012])\/(0?[1-9]|[12][0-9]|3[01])\/\d{4}',striped_raw_date_string) 
 
    # 4) find date format 2021/11/08
    result4 = re.findall('\d{4}\/(0?[1-9]|1[012])\/(0?[1-9]|[12][0-9]|3[01])',striped_raw_date_string) 
 
    # 5) find date format 2023 
    result5 = re.findall('^\d{4}$',striped_raw_date_string) 
 
    if (result1):
     date_time_obj = datetime.strptime(striped_raw_date_string, '%Y-%m-%d') 
     return date_time_obj.strftime("%Y/%m/%d")
    elif (result2):
     date_time_obj = datetime.strptime(striped_raw_date_string, '%d/%m/%Y')
     return date_time_obj.strftime("%Y/%m/%d")
    elif (result3):
     date_time_obj = datetime.strptime(striped_raw_date_string, '%m/%d/%Y')   
     return date_time_obj.strftime("%Y/%m/%d")
    elif (result4):
     date_time_obj = datetime.strptime(striped_raw_date_string, '%Y/%m/%d') 
     return date_time_obj.strftime("%Y/%m/%d")
    elif (result5):
     date_time_obj = datetime.strptime(striped_raw_date_string, '%Y')   
     return date_time_obj.strftime("%Y/%m/%d")
    else: 
    # empty or null set default valid date 
     date_time_obj = datetime.strptime('1900-01-01', '%Y-%m-%d')  
     return date_time_obj.strftime("%Y/%m/%d")
 
 
  
  ---------- end --------- qgis -------------------
 
  ================= test data ==================================
2020 
2019/10/16
2020/08/12 
31/01/2020 
2020-11-03 
05/01/2020 
04/17/2020 
2019/12/31 
2021-07-14
2019/12/04 
2010/12/16 
2021 
04/03/2020 
4/30/2020
2011/07/18 
2017/06/20 
2019 
2021-10-13 
2020
2021-07-14 
2021/11/08 
2020-11-03 
2021 
2019/12/31
2019-12-04 
null
2020/01/04