import isValid from 'date-fns/isValid'; import parse from 'date-fns/parse'; import parseISO from 'date-fns/parseISO'; /** * We should make sure that the formats are in order of decreasing specificity */ const dateFnsFormatStrings = [ 'MM/dd/yyyy h:mm a', 'MM/dd/yyyy HH:mm:ss', 'MM/dd/yyyy HH:mm', 'MM/dd/yyyy', 'M/d/yyyy H:mm', 'M/d/yyyy', 'yyyy/MM/dd h:mm a', 'yyyy/MM/dd HH:mm:ss', 'yyyy/MM/dd HH:mm', 'yyyy/MM/dd', 'yyyy/M/d H:mm', 'yyyy/M/d', 'yyyy-MM-dd h:mm a', 'yyyy-MM-dd HH:mm:ss', 'yyyy-MM-dd HH:mm', 'yyyy-MM-dd', 'yyyy-M-d H:mm', 'yyyy-M-d', 'yyyy年M月d日 h:mm a', 'yyyy年M月d日 HH:mm:ss', 'yyyy年M月d日 HH:mm', 'yyyy年M月d日', 'MMM do, yyyy h:mm a', 'MMM do, yyyy HH:mm:ss', 'MMM do, yyyy HH:mm', 'MMM do, yyyy', 'yyyy年M月', 'yyyy年', 'M月d日', 'MM-dd', 'M-d', 'M/d', ]; export const transformStringToDate = (str: string): Date | null => { const date = parseISO(str); if (isValid(date)) return date; for (const dateTimeFormat of dateFnsFormatStrings) { const date = parse(str, dateTimeFormat, new Date()); if (isValid(date)) { return date; } } return null; };