Created
July 18, 2023 22:18
-
-
Save xmonkee/862c4677293b8c9684a6204f0f274bc3 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const testCases = [ | |
['12 de julio de 2023', '2023-07-12'], | |
['11 de Julio de 2023.', '2023-07-11'], | |
['12/07/2023', '2023-07-12'], | |
['23 de mayo de 2023', '2023-05-23'], | |
['Domingo, 09 de julio de 2023', '2023-07-09'], | |
['29 de junio de 2023', '2023-06-29'], | |
['13 de julio de 2023', '2023-07-13'], | |
['09/06/2023', '2023-06-09'], | |
['27 de Abril de 2023', '2023-04-27'], | |
['17 de enero de 2023', '2023-01-17'], | |
['13 de julio de 2023', '2023-07-13'], | |
['14 de julio de 2023', '2023-07-14'], | |
['10 de julio de 2023', '2023-07-10'], | |
['6 de julio de 2023', '2023-07-06'], | |
['12 de Julio de 2023.', '2023-07-12'], | |
['1 de junio de 2023', '2023-06-01'], | |
['18/04/2023', '2023-04-18'], | |
['13 de julio del 2023.', '2023-07-13'], | |
['13 julio, 2023', '2023-07-13'], | |
['Martes, 20 de Junio de 2023.', '2023-06-20'], | |
['del mes de Abril 2023,', 'Invalid Date'], | |
['14 de julio de 2023', '2023-07-14'], | |
['14 de julio de 2023', '2023-07-14'], | |
['NARI¥O', 'Invalid Date'], | |
['21 de junio de 2023', '2023-06-21'], | |
['15/07/2023', '2023-07-15'], | |
['Miércoles, 12 de julio de 2023 09:54', '2023-07-12'], | |
['21/06/2023', '2023-06-21'], | |
['7 de julio de 2023', '2023-07-07'], | |
['07 de Julio de 2023', '2023-07-07'], | |
['28 de junio de 2023', '2023-06-28'], | |
['20/06/2023', '2023-06-20'], | |
['14 de julio de 2023.', '2023-07-14'], | |
['27/06/2023', '2023-06-27'], | |
['11 de julio de 2023', '2023-07-11'], | |
['10 de julio de 2023', '2023-07-10'], | |
['16 de junio de 2023', '2023-06-16'], | |
['14 de julio de 2023', '2023-07-14'], | |
['10 de julio de 2023', '2023-07-10'], | |
['13 de julio de 2023', '2023-07-13'], | |
['2023/03/31', '2023-03-31'], | |
['10 de julio de 2023', '2023-07-10'], | |
['03 de febrero de 2023', '2023-02-03'], | |
['07 de julio de 2023', '2023-07-07'], | |
['06 de Febrero del 2023', '2023-02-06'], | |
['30 del mes de Mayo del año 2023', '2023-05-30'], | |
['14 de julio de 2023', '2023-07-14'], | |
['Martes, 11 de julio de 2023 19:20', '2023-07-11'], | |
['12 de julio de 2023', '2023-07-12'], | |
['3 de mayo de 2023', '2023-05-03'], | |
['11 de julio de 2023', '2023-07-11'], | |
['Martes, 11 de julio de 2023 16:36', '2023-07-11'], | |
['10 de julio de 2023', '2023-07-10'], | |
['27 de junio de 2023', '2023-06-27'], | |
['Miércoles, 12 de julio de 2023 20:14', '2023-07-12'], | |
['6 de julio de 2023', '2023-07-06'], | |
['13/07/2023', '2023-07-13'], | |
['11 de julio de 2023', '2023-07-11'], | |
['2023/03/31', '2023-03-31'], | |
['13 de Julio de 2023.', '2023-07-13'], | |
['12 de JULIO de 2023', '2023-07-12'], | |
['11 de julio de 2023', '2023-07-11'], | |
['13 de Julio de 2023.', '2023-07-13'], | |
['10 del mes de Julio del año 2023', '2023-07-10'], | |
['Bogotá23.de Junio de 2023.', '2023-06-23'], | |
['11 de julio de 2023', '2023-07-11'], | |
['14 de julio de 2023', '2023-07-14'], | |
['28 de abril de 2023', '2023-04-28'], | |
['28 del mes de Marzo del año 2023', '2023-03-28'], | |
['27 de junio 2023.', '2023-06-27'], | |
['11 de julio de 2023', '2023-07-11'], | |
['13 de julio de 2023', '2023-07-13'], | |
['11 de julio de 2023', '2023-07-11'], | |
['Martes, 11 de julio de 2023', '2023-07-11'], | |
['13 de abril de 2022', '2022-04-13'], | |
['11 de julio de 2023', '2023-07-11'], | |
['12/07/2023', '2023-07-12'], | |
['26 de abril de 2023', '2023-04-26'], | |
['12/07/2023', '2023-07-12'], | |
['12 de julio de 2023', '2023-07-12'], | |
['11 de enero de 2023 01 de febrero de 2023', '2023-01-11'], | |
['Domingo, 16 de julio de 2023', '2023-07-16'], | |
['12 de Julio de 2023.', '2023-07-12'], | |
['11 de julio de 2023', '2023-07-11'], | |
['12 de julio del 2023.', '2023-07-12'], | |
['7 de julio de 2023', '2023-07-07'], | |
['5 de Julio de 2023.', '2023-07-05'], | |
['09 de junio de 2023,', '2023-06-09'], | |
['11 de julio de 2023', '2023-07-11'], | |
['12 del mes de Julio del año 2023', '2023-07-12'], | |
['Miércoles, 12 de julio de 2023', '2023-07-12'], | |
['11 de julio de 2023', '2023-07-11'], | |
['11/07/2023', '2023-07-11'], | |
['12 de julio de 2023', '2023-07-12'], | |
['23 del mes de Junio del año 2023', '2023-06-23'], | |
['27 de marzo de 2023', '2023-03-27'], | |
['18 de Junio de 2023,', '2023-06-18'], | |
['12 de julio de 2023', '2023-07-12'], | |
['03 de abril de 2023', '2023-04-03'], | |
['12 de Julio de 2023.', '2023-07-12'], | |
['12 de julio de 2023.', '2023-07-12'], | |
['Jueves, 13 de Julio de 2023.', '2023-07-13'], | |
['06 de Julio de 2023', '2023-07-06'], | |
['12 de julio de 2023', '2023-07-12'], | |
['13 de Julio del 2023', '2023-07-13'], | |
['23 de junio de 2023', '2023-06-23'], | |
['4 de julio de 2023', '2023-07-04'], | |
['mes de JUNIO de 2023', 'Invalid Date'], | |
['2023/03/31', '2023-03-31'], | |
['12/07/2023', '2023-07-12'], | |
['13 de julio de 2023', '2023-07-13'], | |
['13 del mes de Julio del año 2023', '2023-07-13'], | |
['10 de julio de 2023', '2023-07-10'], | |
['7 de julio de 2023', '2023-07-07'], | |
['8 de Junio de 2023.', '2023-06-08'], | |
['Martes, 4 de julio de 2023', '2023-07-04'], | |
['25 de mayo de 2023', '2023-05-25'], | |
['12 de julio de 2023', '2023-07-12'], | |
['13 de junio de 2023', '2023-06-13'], | |
['11 de julio de 2023', '2023-07-11'], | |
['11 de julio de 2023', '2023-07-11'], | |
['2023/07/11', '2023-07-11'], | |
['13 de julio de 2023', '2023-07-13'], | |
['12 de julio de 2023', '2023-07-12'], | |
['13 de julio de 2023', '2023-07-13'], | |
['12 de julio de 2023', '2023-07-12'], | |
['12/07/2023', '2023-07-12'], | |
['12/07/2023', '2023-07-12'], | |
['12/07/2023', '2023-07-12'], | |
['Sábado, 8 de octubre de 2022 16:08', '2022-10-08'], | |
['8 de julio de 2023', '2023-07-08'], | |
['08/07/2023', '2023-07-08'], | |
['06/05/2023', '2023-05-06'], | |
['12 de julio de 2023', '2023-07-12'], | |
['11 de julio de 2023', '2023-07-11'], | |
['02 de junio de 2023', '2023-06-02'], | |
['12 de julio del 2023.', '2023-07-12'], | |
['12/07/2023', '2023-07-12'], | |
['12 de julio de 2023', '2023-07-12'], | |
['18 de Abril de 2022', '2022-04-18'], | |
['07 de julio de 2023', '2023-07-07'], | |
['12 de Julio de 2023.', '2023-07-12'], | |
['12 de julio de 2023', '2023-07-12'], | |
['12 de julio de 2023', '2023-07-12'], | |
['4 de julio de 2023', '2023-07-04'], | |
['13/07/2023', '2023-07-13'], | |
['966', 'Invalid Date'], | |
['12/07/2023', '2023-07-12'], | |
['12/07/2023', '2023-07-12'], | |
['1 de julio de 2023', '2023-07-01'], | |
['12 de julio de 2023', '2023-07-12'], | |
['10 de julio de 2023', '2023-07-10'], | |
['28 de junio de 2023', '2023-06-28'], | |
['12 de julio de 2023', '2023-07-12'], | |
['14/07/2023', '2023-07-14'], | |
['17/04/2023', '2023-04-17'], | |
['de\n\n2023\n\n12 días del mes de\n\nJulio', 'Invalid Date'], | |
['12 de Julio de 2023', '2023-07-12'], | |
['12 de julio de 2023', '2023-07-12'], | |
['13 de julio de 2023', '2023-07-13'], | |
['1 de julio de 2023', '2023-07-01'], | |
['12 de julio de 2023', '2023-07-12'], | |
['14 de junio de 2023', '2023-06-14'], | |
['julio 12 de 2023', '2023-07-12'], | |
['14/07/2023', '2023-07-14'], | |
['27 de abril de 2023', '2023-04-27'], | |
['Jueves, 13 de Julio de 2023.', '2023-07-13'], | |
['4 de Septiembre de 2020', '2020-09-04'], | |
['01 de junio de 2023', '2023-06-01'], | |
['29 de junio de 2023', '2023-06-29'], | |
['17 de Septiembre de 2020', '2020-09-17'], | |
['12 de julio de 2023', '2023-07-12'], | |
['12 de julio de 2023', '2023-07-12'], | |
['13 de julio de 2023', '2023-07-13'], | |
['11 de julio de 2023', '2023-07-11'], | |
['11 de julio de 2023', '2023-07-11'], | |
['3 de noviembre de 2022', '2022-11-03'], | |
['11 de noviembre de 2021', '2021-11-11'], | |
['11 de mayo de 2023', '2023-05-11'], | |
['12 de julio de 2023', '2023-07-12'], | |
['2023/07/12', '2023-07-12'], | |
['13 de Junio de 2023', '2023-06-13'], | |
['13 de julio de 2023', '2023-07-13'], | |
['11 de marzo de 2022', '2022-03-11'], | |
['13/07/2023', '2023-07-13'], | |
['12 de julio de 2023', '2023-07-12'], | |
['12 de julio de 2023', '2023-07-12'], | |
['10 de julio de 2023', '2023-07-10'], | |
['Miércoles, 12 de julio de 2023', '2023-07-12'], | |
['07 de julio de 2023', '2023-07-07'], | |
['12/07/2023', '2023-07-12'], | |
['31 de diciembre de 2022', '2022-12-31'], | |
['12 de julio de 2023', '2023-07-12'], | |
['12 de julio de 2023', '2023-07-12'], | |
['Domingo, 9 de julio de 2023', '2023-07-09'], | |
['12 de julio de 2023', '2023-07-12'], | |
['07 de julio de 2023', '2023-07-07'], | |
['6 de julio de 2023', '2023-07-06'], | |
['12 de Julio de 2023', '2023-07-12'], | |
['12 de julio de 2023', '2023-07-12'], | |
['13 de julio de 2023', '2023-07-13'], | |
['12 de Julio de 2023.', '2023-07-12'], | |
['12 del mes de Julio del año 2023', '2023-07-12'], | |
['12 de julio de 2023', '2023-07-12'], | |
['Bogotá, 6 de Julio 2023', '2023-07-06'], | |
['13 de julio de 2023', '2023-07-13'], | |
['13 de julio de 2023', '2023-07-13'], | |
['12 de julio de 2023', '2023-07-12'], | |
['22 de junio de 2023', '2023-06-22'], | |
['25 de febrero de 2022', '2022-02-25'], | |
['17 de junio de 2022', '2022-06-17'], | |
['5 de Junio de 2023', '2023-06-05'], | |
['13/07/2023', '2023-07-13'], | |
['4 de julio de 2023', '2023-07-04'], | |
['14 de julio de 2023', '2023-07-14'], | |
['60', 'Invalid Date'], | |
['12 de julio de 2023', '2023-07-12'], | |
['2023,', 'Invalid Date'], | |
['10 de julio de 2023', '2023-07-10'], | |
['9 de mayo de 2023', '2023-05-09'], | |
['12 de julio de 2023', '2023-07-12'], | |
['15 de julio de 2023', '2023-07-15'], | |
['13 de julio de 2023', '2023-07-13'], | |
['11 de julio de 2023', '2023-07-11'], | |
['11 de julio de 2023', '2023-07-11'], | |
['23 de junio de 2023,', '2023-06-23'], | |
['13/07/2023', '2023-07-13'], | |
['11 de abril de 2023', '2023-04-11'], | |
['6 de Febrero de 2023.', '2023-02-06'], | |
['mes de julio de 2023,', 'Invalid Date'], | |
['17 de febrero de 2023', '2023-02-17'], | |
['07 de julio de 2023', '2023-07-07'], | |
['13/07/2023', '2023-07-13'], | |
['1 de Julio de 2023.', '2023-07-01'], | |
['09/07/2022', '2022-07-09'], | |
['16 de mayo de 2023', '2023-05-16'], | |
['13 de julio de 2023', '2023-07-13'], | |
['06 de julio de 2023,', '2023-07-06'], | |
['Jueves, 13 de Julio de 2023.', '2023-07-13'], | |
['13 de julio de 2023', '2023-07-13'], | |
['Medellín, 13 de julio del 2023', '2023-07-13'], | |
['30 de junio de 2023', '2023-06-30'], | |
['13 de julio de 2023', '2023-07-13'], | |
] | |
function parseDate(dateString) { | |
const months = [ | |
'enero', | |
'febrero', | |
'marzo', | |
'abril', | |
'mayo', | |
'junio', | |
'julio', | |
'agosto', | |
'septiembre', | |
'octubre', | |
'noviembre', | |
'diciembre', | |
] | |
const formats = [ | |
new RegExp(`(?<DD>\\d{1,2})\\D+(?<mmm>${months.join('|')})\\D+(?<YYYY>\\d{4})`), | |
new RegExp(`(?<DD>\\d{1,2})(?:-|\\/)(?<MM>\\d{1,2})(?:-|\\/)(?<YYYY>\\d{4})`), | |
new RegExp(`(?<YYYY>\\d{4})(?:-|\\/)(?<MM>\\d{1,2})(?:-|\\/)(?<DD>\\d{1,2})`), | |
new RegExp(`(?<mmm>${months.join('|')})\\D+(?<DD>\\d{1,2})\\D+(?<YYYY>\\d{4})`), | |
] | |
for (let format of formats) { | |
const date = parseDateForFormat(dateString, format) | |
if (date) { | |
return date | |
} | |
} | |
return 'Invalid Date' | |
function parseDateForFormat(dateString, format) { | |
const match = dateString.toLowerCase().match(format) | |
if (!match) { | |
return null | |
} | |
const { DD, MM, mmm, YYYY } = match.groups | |
const day = DD.padStart(2, '0') | |
const month = mmm | |
? (months.findIndex((m) => m == mmm) + 1).toString().padStart(2, 0) | |
: MM.padStart(2, '0') | |
const year = YYYY | |
return `${year}-${month}-${day}` | |
} | |
} | |
describe.each(testCases)('formatDate(%s)', (dateString, expected) => { | |
test(`returns ${expected}`, () => { | |
expect(parseDate(dateString)).toStrictEqual(expected) | |
}) | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment