• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

130
Views
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 3 years ago · Juan Pablo Isaza
2 answers
Answer question

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 3 years ago · Juan Pablo Isaza Report

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 3 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error