Created
June 19, 2024 22:13
-
-
Save brpereyra/1f42cc655d58869cba44460893d07350 to your computer and use it in GitHub Desktop.
Calculadora de tiempo con dias habiles, fechas no laborales y horarios habiles
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const { DateTime } = require("luxon"); | |
// datos de entrada | |
const currentDate = DateTime.now().setZone("America/New_York"); | |
const horasDeSla = 12; //300 min | |
// horas de configuracion | |
const horaDeInicioDeJornada = 8; | |
const horaDeInicioDeAlmuerzo = 12; | |
const horaDeFinDeJornada = 17; | |
// días de 1 a 7, 1 es lunes y 7 es domingo | |
// configuraciones de fecha | |
const diasNoLaborablesDeLaSemana = [6, 7]; | |
const diasFeriadosNoLaborales = ["24/06/2024"]; | |
// funciones | |
const esDiaLaboral = (date) => { | |
const fechaFormateada = date.toFormat("dd/MM/yyyy"); | |
const esFechaNoLaboral = diasFeriadosNoLaborales.includes(fechaFormateada); | |
if (esFechaNoLaboral) { | |
return false; | |
} | |
const diaDeLaSemana = date.weekday; | |
if (diasNoLaborablesDeLaSemana.includes(diaDeLaSemana)) { | |
return false; | |
} | |
return true; | |
}; | |
const esHoraLaboral = (date) => { | |
if (esHoraDeAlmuerzo(date)) { | |
// console.log("Es hora de almuerzo"); | |
return false; | |
} else if (!esHoraDeInicioDeJornada(date)) { | |
// console.log("no es hora de inicio de jornada"); | |
return false; | |
} else if (!esHoraDeFinDeJornada(date)) { | |
// console.log("es hora de fin de jornada"); | |
return false; | |
} | |
return true; | |
}; | |
esHoraDeAlmuerzo = (date) => { | |
const hora = date.hour; | |
return hora === horaDeInicioDeAlmuerzo; | |
}; | |
esHoraDeInicioDeJornada = (date) => { | |
const hora = date.hour; | |
return hora >= horaDeInicioDeJornada; | |
}; | |
esHoraDeFinDeJornada = (date) => { | |
const hora = date.hour; | |
return hora < horaDeFinDeJornada; | |
}; | |
const calcularFechaDeEntrega = (currentDate, horasDeSla) => { | |
minutesSla = horasDeSla * 60; | |
while (minutesSla > 0) { | |
currentDate = currentDate.plus({ minutes: 1 }); | |
if (esDiaLaboral(currentDate) && esHoraLaboral(currentDate)) { | |
minutesSla--; | |
} | |
} | |
return currentDate; | |
}; | |
console.log( | |
"fecha de entrega", | |
calcularFechaDeEntrega(currentDate, horasDeSla) | |
); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment