Tengo una serie de objetos que contienen marcas de tiempo y estoy intentando clasificarlos en orden ascendente. Intenté convertirlos a 24 horas usando el momento al ordenar y comparar las marcas de tiempo, pero por alguna razón sigo obteniendo mis tiempos en un orden aleatorio. ¿Se me escapa algo?
datos cuando ya se han convertido 12 horas de tiempo
[{start: '9:04 AM', end: '9:34 AM'}, {start: '3:04 AM', end: '3:34 AM'}...]
const sortedAppointments = appointments.sort( (a, b) => moment(a.start).format("H:mm") - moment(b.start).format("H:mm"), );
nota: estoy mapeando la matriz en la interfaz de usuario después de ordenarla. Pero la salida de esta función de clasificación todavía está fuera de servicio "/
Lea los tiempos en el momento con el formato correcto, luego compare las marcas de tiempo de UNIX.
const sortedAppointments = appointments.sort( (a, b) => moment(a.start, "h:mm a").unix() - moment(b.start, "h:mm a").unix() );
Por si sirve de algo, aquí hay una versión sin la descarga de más de 200 kb de moment.js
let appointments = [{ start: '9:04 AM', end: '9:34 AM' }, { start: '9:04 PM', end: '10:34 PM' }, { start: '3:04 AM', end: '3:34 AM' }] const conv = time => { let mer = time.split(" ")[1].toLowerCase(), tm = time.split(" ")[0].split(":"); if (mer === "pm") tm[0] = +tm[0] + 12; return +tm.join(''); } const sortedAppointments = appointments.sort( (a, b) => conv(a.start) - conv(b.start) ); console.log(sortedAppointments)
Esta es la solución que mejor me funcionó con el tiempo en UTC:
const sortedAppointments = appointments.sort( (a, b) => moment(a.start).format("x") - moment(b.start).format("x"), );