Necesito crear una función que exceptúe 2 matrices de parámetros de tiempos y devuelva verdadero o falso si la segunda matriz está entre una de las veces de la primera matriz:
function calculateIsBetween(workTimes, breakTimes) { // ... ... ... }Ejemplo 1:
calculateIsBetween( [ {entryTime: '12:00', exitTime: '13:00'}, {entryTime: '14:00', exitTime: '15:00'} ], [ {startBreak: '12:05', endBreak: '12:10'}, {startBreak: '12:25', endBreak: '12:30'} ] )La función devuelve verdadero porque se rompe entre al menos uno de los tiempos de entrada y salida.
ejemplo 2:
calculateIsBetween( [ {entryTime: '12:00', exitTime: '13:00'}, {entryTime: '14:00', exitTime: '15:00'} ], [ {startBreak: '16:05', endBreak: '18:10'}, {startBreak: '12:25', endBreak: '12:30'} ] )La función devuelve falso porque no se rompe entre al menos uno de los tiempos de entrada y salida.
La función ps también debe tener cuidado con los horarios nocturnos.
Intenté algo con moment pero no funciona bien.
Que me puedas ayudar
Intentaré desglosar mi código, espero que esté escrito lo suficientemente bien como para que se explique por sí mismo. Primero necesito crear una matriz de rangos permitidos para los descansos. Cada elemento de la matriz tendrá un máximo para las horas y un máximo para los minutos. Uso .map para crear la matriz de valores máximos y mínimos a partir del argumento de tiempos de trabajo pasado.
Mi siguiente línea devuelve el retorno booleano de un método de prueba breakTimes .every La prueba que debe pasar cada elemento de la matriz es una función que primero toma los valores inicial y final de la hora y el minuto. Esta prueba devuelve verdadero si incluso un conjunto de los rangos permitidos permite los tiempos de descanso.
No entendí a qué te referías con tomar en consideración el día siguiente, no había datos para el día en los ejemplos dados. Sin embargo, este debería ser un buen punto de partida.
Si tiene alguna pregunta sobre el código, por favor pregunte 👋
function calculateIsBetween(workTimes, breakTimes) { const allowedRanges = workTimes.map(({entryTime, exitTime}) => { const [hMin, mMin] = entryTime.split(":"); const [hMax, mMax] = exitTime.split(":"); return {hMin, hMax, mMin, mMax}; }); return breakTimes.every(({startBreak, endBreak}) => { const [hStart, mStart] = startBreak.split(":"); const [hEnd, mEnd] = endBreak.split(":"); return allowedRanges.some(({hMin, hMax, mMin, mMax}) => { if ( hStart < hMin || hEnd > hMax ) return false; if ( hStart > hMin && hEnd < hMax ) return true; if ( (hStart == hMin && mStart < mMin) || (hEnd == hMax && mEnd > mMax) ) return false; return true; }); }); } console.log( calculateIsBetween( [ {entryTime: '12:00', exitTime: '13:00'}, {entryTime: '14:00', exitTime: '15:00'} ], [ {startBreak: '12:05', endBreak: '12:10'}, {startBreak: '12:25', endBreak: '12:30'} ] ) ); //returns true console.log( calculateIsBetween( [ {entryTime: '12:00', exitTime: '13:00'}, {entryTime: '14:00', exitTime: '15:00'} ], [ {startBreak: '16:05', endBreak: '18:10'}, {startBreak: '12:25', endBreak: '12:30'} ] ) ); //returns false .as-console-wrapper { max-height: 100% !important; top: 0;}