Tengo las siguientes fechas en marcas de tiempo utc. Me gustaría saber si los dos rangos de tiempo se superponen. Aquí está el código que tengo hasta ahora:
dateRangeOverlaps(aStart, aEnd, bStart, bEnd) { if (aStart <= bStart && bStart <= aEnd) return true; // b starts in a if (aStart <= bEnd && bEnd <= aEnd) return true; // b ends in a if (bStart < aStart && aEnd < bEnd) return true; // a in b return false; }Desafortunadamente, cuando las horas de inicio y las horas de finalización se superponen, la función devuelve verdadero. Por ejemplo, si tengo las horas: 9 am a 11 am y 11 am a 1 pm, estas dos horas no deberían superponerse, pero la función devuelve verdadero, no obstante.
O si tengo la hora de 8 am a 11 am y de 11 am a 1 pm, devuelve verdadero.
¿Cómo puedo hacer que devuelva falso para los tiempos anteriores?
asi que
// 11:00 const aStart = 1641052800000; // 11:30 const aEnd = 1641054600000; // 9:00 const bStart = 1641045600000; // 11:00 const bEnd = 1641052800000; // should return false console.dir(dateRangeOverlaps(aStart, aEnd, bStart, bEnd))Si completa el ejemplo con el código (9 a. m. a 11 a. m. y 11 a. m. a 1 p. m.), puede ver fácilmente el motivo:
dateRangeOverlaps(aStart, aEnd, bStart, bEnd) { if (9am <= 11am && 11am <= 11am) return true; // returns true // ... }Cambiaría la lógica a la siguiente para que sea más fácil de leer:
function dateRangeOverlaps(aStart, aEnd, bStart, bEnd) { // Make sure aStart is before bStart if (aStart > bStart) { // Exchange a and b [aStart, aEnd, bStart, bEnd] = [bStart, bEnd, aStart, aEnd] } // Check overlap return aEnd > bStart }Vea esta respuesta para un método más eficiente.