¿Cómo ordeno una lista por fecha/hora? en mi aplicación, el formato de fecha/hora es "lunes, 1 de noviembre | 8:30 p. m." cuando intento convertir la cadena en fecha y obtengo una fecha no válida como o/p. Ayúdame a ordenar una lista por fecha/hora.
la fecha/hora "Lunes, 1 de noviembre | 8:30 p. m." no tiene 'año'
Puede analizar las cadenas en valores que se ordenen según sea necesario. Si el año no es importante, eso lo hace más fácil.
Convierta el mes en un número, convierta las horas en 24 horas y luego rellene con dos dígitos para que, por ejemplo, "lunes, 1 de noviembre | 8:30 p. m." se convierta en 11012030.
P.ej
function parseMyDate(s) { let z = n => ('0'+n).slice(-2); let months = {jan:'01',feb:'02',mar:'03',apr:'04',may:'05',jun:'06', jul:'07',aug:'08',sep:'09',oct:'10',nov:'11',dec:'12'}; let [d, M, D, H, m, ap] = s.toLowerCase().split(/\W+/); return `${months[M]}${z(D)}${z(H%12 + (ap == 'am'?0:12))}${z(m)}`; } let d = 'Mon, Nov 1 | 8:30 PM'; console.log(`${d} -> ${parseMyDate(d)}`); // 11012030 let data = ['Mon, Nov 1 | 8:30 PM', 'Mon, Nov 1 | 12:00 PM', 'Sun, Oct 30 | 8:30 AM', 'Mon, Nov 1 | 8:30 AM']; console.log(data.sort((a, b) => parseMyDate(a) - parseMyDate(b)));He codificado y recortado ese '|' carácter del formato de fecha/hora. Capaz de ordenar, consulte el siguiente fragmento. Según los comentarios a continuación, getTime() o/p puede variar según el navegador
let unsortedDate = [ "Tue, Nov 2 6:25 PM", "Wed, Oct 28 12:30 AM", "Mon, Nov 8 3:05 AM", "Mon, Nov 1 8:30 PM"]; var sort = []; unsortedDate.forEach(date => { sort.push([ date, new Date(date).getTime() ]); }) console.log(sort); sort.sort( (a, b) => a[1] - b[1] ); let sorted_array = sort.map(arr => arr[0]) console.log(sorted_array)