Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

362
Views
JavaScript: ordenar una matriz de marcas de tiempo con formato de día-mes-año

Tengo una serie de marcas de tiempo o cadenas que tienen este formato: día-mes-año. por ejemplo ['03-11-2018', '04-12-2018', '10-01-2017', '10-12-2017']

Y quiero ordenarlos cronológicamente para que la matriz anterior se convierta en [ '10-01-2017', '10-12-2017', '03-11-2018', '04-12-2018' ]

Soy consciente de que puede usar moment.js para hacer esto, pero quiero escribir esto a mano sin usar ninguna tercera biblioteca.

Aquí está mi intento:

 function sortTimestamp(array) { array.sort((time1, time2) => { const [day1, month1, year1] = time1.split('-') const [day2, month2, year2] = time2.split('-') return year2 > year1 ? -1 : year2 < year1 ? 1 : month2 > month1 ? -1 : month2 > month1 ? 1 : day2 > day1 ? -1 : 1 }) }

Funciona bien, pero no es realmente legible y es un enfoque muy imperativo. Me pregunto si hay una mejor manera de hacerlo y también, idealmente, se puede ampliar para admitir otros formatos de fecha, por ejemplo, mes-día-año.

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Una alternativa es especificar con argumentos adicionales cuál es el formato (regex) y cómo se debe reordenar al formato AAAAMMDD de estilo ISO. Luego, la función puede realizar ese reemplazo y hacer una clasificación léxica:

 function sortTime(array, regex, iso) { let fmt = time => time.replace(regex, iso); return array.sort((time1, time2) => fmt(time1).localeCompare(fmt(time2))); } // demo let dates = ['03-11-2018', '04-12-2018', '10-01-2017', '10-12-2017']; let result = sortTime(dates, /(..)-(..)-(....)/, "$3$2$1"); console.log(result);

Entonces, si la entrada debe interpretarse como mm-dd-yyyy en lugar de dd-mm-yyyy, haga que el tercer argumento sea "$3$1$2" en lugar de "$3$2$1".

about 4 years ago · Juan Pablo Isaza Report

0

Es un poco más simple usando restas en lugar de ternarios anidados.

 function sortTimestamp(array) { array.sort((time1, time2) => { const [day1, month1, year1] = time1.split('-') const [day2, month2, year2] = time2.split('-') return year1 - year2 || month1 - month2 || day1 - day2; }) }
about 4 years ago · Juan Pablo Isaza Report

0

Primero puede convertirlos en objetos de fecha y luego usar la funcionalidad getTime para compararlos y clasificarlos. Una pregunta similar fue respondidaaquí

 const dates = ['03-11-2018', '04-12-2018', '10-01-2017', '10-21-2017'] sortedDates = dates.sort((a,b)=>{ const dateA = new Date(a) const dateB = new Date(b) //change the comparison sign for required orde return dateA.getTime() < dateB.getTime() ? 1 : -1 }) console.log(sortedDates)

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!