Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

374
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda