Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

174
Visualizações
Encuentre tiempos de inicio de sesión consecutivos de la lista de matrices de javascript

Tengo una variedad de objetos en javascript donde tengo tiempos de inicio de sesión de empleados. Quiero averiguar si un empleado ha trabajado más de 5 horas consecutivas, entonces tendrá un descanso. De lo contrario, si un empleado trabajó más de 5 horas, pero no consecutivamente, no tendrá descanso.

Aquí está el código: actualmente solo está verificando la cantidad de horas que un empleado ha trabajado, pero no está verificando las horas consecutivas.

 checkBreakTimings() { let breakTimes = ""; const timings = [ { timeIn: '11:00', timeOut: '12:00', }, { timeIn: '12:00', timeOut: '13:00', }, { timeIn: '14:00', timeOut: '16:00', }, { timeIn: '16:00', timeOut: '18:00', } ]; let h = 0; timings.forEach(e => { const ms = moment(e.timeOut, "HH:mm").diff(moment(e.timeIn, "HH:mm")); h = h + = Number(moment.duration(ms).asHours()); }); if(h > 5 ) { breakTimes = "Yes"; } } return breakTimes; }

Como puede ver en los tiempos anteriores, un empleado trabajó 8 horas, de las cuales 6 horas son consecutivas de 14:00 a 18:00, aquí se aplicará un descanso, pero los 2 tiempos anteriores no son consecutivamente más de 5 horas.

Mi problema es: ¿hay alguna forma de averiguar la cantidad de horas consecutivas de una matriz usando JavaScript o en moment.js?

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Prueba como el siguiente fragmento:

 const checkBreakTimings = () => { let breakTimes = ""; const timings = [ {timeIn: '11:15', timeOut: '12:00', }, {timeIn: '12:00', timeOut: '13:00', }, {timeIn: '13:00', timeOut: '15:46', }, {timeIn: '16:00', timeOut: '18:00', } ]; let h = 0; let consecutive = 0 let lastOut = null timings.forEach(e => { const ms = moment(e.timeOut, "HH:mm").diff(moment(e.timeIn, "HH:mm")); let worked = Number(moment.duration(ms).asHours()) consecutive = worked if (lastOut === e.timeIn) { //👈 compare if timeIn is equal to last timeOut and sum values consecutive += worked } else consecutive = 0 lastOut = e.timeOut if (consecutive > 5) breakTimes = "Yes" //👈 it's more then 5 hours h = h + Number(moment.duration(ms).asHours()); }); console.log(breakTimes); } checkBreakTimings()
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js" integrity="sha512-qTXRIMyZIFb8iQcfjXWCO8+M5Tbc38Qi5WzdPOYZHIlZpzBHG3L3by84BBBOiRGiEb7KKtAOAs5qYdUiZiQNNQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

about 4 years ago · Juan Pablo Isaza Relatório

0

Aquí hay una función que podría hacer el truco.

 function isAllowedBrake(times) { let isAllowed = false let consecutive = 0; let lastVal times.forEach((e) => { if (lastVal && moment(lastVal, "HH:mm").isBefore(moment(e.timeIn, "HH:mm"))) { consecutive = 0 } const ms = moment(e.timeOut, "HH:mm").diff(moment(e.timeIn, "HH:mm")); let duration = Number(moment.duration(ms).asHours()) consecutive += duration lastVal = e.timeOut }) if (consecutive > 5) { isAllowed = true; } return isAllowed; }

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda