Tengo un objeto que se parece a esto:
["09:00 AM", "12:00 PM", "03:00 PM"]Simplemente quiero tomar estos valores y analizarlos en un número entero entre 0-24 básicamente, actualmente lo estoy tomando así:
if ("09:30 AM") { return 9.5}¿Hay una mejor manera de hacer esto?
Puede crear métodos para convertir el tiempo en un número flotante y luego usar el mapa para llamar a la función en cada elemento de su matriz. Ahora tienes una matriz de números flotantes:
Aquí está el fragmento de trabajo:
function timeStringToFloat(time) { var hoursMinutes = time.split(/[.:]/); var hours = parseInt(hoursMinutes[0], 10); var minutes = hoursMinutes[1] ? parseInt(hoursMinutes[1], 10) : 0; return hours + minutes / 60; } var data = ["09:30 AM", "12:00 PM", "03:00 PM"] var d = data.map(t => timeStringToFloat(t)) console.log(d);Esta solución asigna la entrada del formato de hora a un número entre 0 (inclusive) y 24 (exclusivo), al igual que el formato de 24 horas.
function parse(dfmt) { const [hh, mmdp] = dfmt.split(":") const [mm, dp] = mmdp.split(" ") const hours = parseInt(hh) const minutes = parseInt(mm) return (dp == "AM" ? 0 : 12) + (hours % 12) + (minutes / 60) } const dfmts = ["09:00 AM", "03:00 PM", "09:30 PM", "12:00 AM", "12:00 PM"] dfmts.forEach(dfmt => console.log(parse(dfmt)))Esto debería funcionar. Analiza " 12:00 PM " a 12.0 y " 12:00 AM " a 0.0:
const times = ["09:30 AM", "01:24 AM", "03:00 PM", "12:00 AM", "12:00 PM"] function time2Float(a) { return a.map(t => { const apm = t.split(" ")[1]; let h = parseInt(t.split(":")[0]); let m = parseInt(t.split(" ")[0].split(":")[1]); apm === "PM" && h !== 12 && (h += 12); apm === "AM" && h === 12 && (h -= 12); m = (m * 100) / 60; return parseFloat(h + "." + m); }); } console.log(time2Float(times));