Skip to content

Instantly share code, notes, and snippets.

@brpereyra
Created June 19, 2024 22:13
Show Gist options
  • Save brpereyra/1f42cc655d58869cba44460893d07350 to your computer and use it in GitHub Desktop.
Save brpereyra/1f42cc655d58869cba44460893d07350 to your computer and use it in GitHub Desktop.
Calculadora de tiempo con dias habiles, fechas no laborales y horarios habiles
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