El objetivo es comprobar si la fecha seleccionada no supera el tiempo máximo.
Tengo una serie de intervalos de tiempo. El tiempo máximo es toMinutes - 20 minutes .
A continuación puede encontrar mi solución, que siempre devuelve false .
¿Cómo se puede editar para que coincida con el resultado esperado, que también se especifica a continuación?
const dateRanges = [{fromMinutes: 360, toMinutes: 600}, {fromMinutes: 700, toMinutes: 900}]; // "06:00 - 10:00", "11:40" - "15:00" const minutesToHourFormat = (minutes) => { return new Date(minutes * 1000).toISOString().slice(14, 19); }; const isWithinMinDate = () => { const selectedDate = "14:30"; return dateRanges.every(({ toMinutes }) => { const minTime = minutesToHourFormat(toMinutes - 20); return selectedDate <= minTime; }) } // Expected Result // 14:30 -> true // 14:40 -> false // 14:10 -> true // 9:50 -> false // 9:30 -> true console.log(isWithinMinDate(), 'res')every sus llamadas deben verificarse con ambos límites, porque el tiempo dado podría estar fuera de cualquier intervalo, o cuando está dentro de los 20 minutos para un intervalo final, ¡aún se consideraría al verificar un intervalo posterior!
Y preferiría convertir la cadena de tiempo seleccionada a minutos, en lugar de hacer lo contrario:
const hourFormatToMinutes = (fmt) => fmt.split(":").reduce((h, m) => h * 60 + +m); const minutesToHourFormat = (minutes) => new Date(minutes * 1000).toISOString().slice(14, 19); const dateRanges = [ { fromMinutes: hourFormatToMinutes("6:00"), toMinutes: hourFormatToMinutes("10:00") }, { fromMinutes: hourFormatToMinutes("11:40"), toMinutes: hourFormatToMinutes("15:00") } ]; const isWithinMinDate = (hourFmt) => { const minutes = hourFormatToMinutes(hourFmt); return dateRanges.some(({ fromMinutes, toMinutes }) => minutes >= fromMinutes && minutes < toMinutes - 20 ); } for (const test of ["14:30", "14:40", "14:10", "9:50", "9:30"]) { console.log(test, isWithinMinDate(test)); }