Skip to content

Instantly share code, notes, and snippets.

@xmonkee
Created July 18, 2023 22:18
Show Gist options
  • Save xmonkee/862c4677293b8c9684a6204f0f274bc3 to your computer and use it in GitHub Desktop.
Save xmonkee/862c4677293b8c9684a6204f0f274bc3 to your computer and use it in GitHub Desktop.
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