25 septiembre, 2023

CUSTOM FUNCTION PARA GENERAR LISTA DE FECHAS DE DÍAS LABORALES ENTRE DOS FECHAS CON TYPESCRIPT

Hola a todos!

Como continuación al post anterior: CUSTOM FUNCTION PARA GENERAR LISTA DE FECHAS ENTRE DOS FECHAS CON TYPESCRIPT en que generábamos un listado de fechas entre dos fechas. He decido aprovechar el trabajo y hacer unas modificaciones para obtener la misma lista de fechas pero solo con días laborales, (o cualquier otro día).

En realidad el planteamiento es muy sencillo, únicamente tenemos que excluir del loop que va guardando las fechas en una variable los días sábado y domingo.

En el código lo vais a ver perfectamente:

/**
 * @customfunction
 * @param {number[][]}
 * @returns {string[][]} 
 */
function fechasEntreLab(inicio, final) {
  //convertimos fecha número
  var ini = new Date(Math.round((inicio - 25569) * 86400 * 1000)).toLocaleDateString("en-US");
  var fin = new Date(Math.round((final - 25569) * 86400 * 1000)).toLocaleDateString("en-US");
  var i = 0;
  do {
    i++;
    //generamos días
    var nIni = new Date(Date.parse(ini) + i * 24 * 60 * 60 * 1000);
    var nFin = new Date(Date.parse(fin) + 1 * 24 * 60 * 60 * 1000);
    //formateamos fecha
    var fechas = ('0' + nIni.getUTCDate()).slice(-2) + '/'
      + ('0' + (nIni.getUTCMonth() + 1)).slice(-2) + '/'
      + nIni.getUTCFullYear();
    //obtenemos el día, en este caso el literal  
    let alfafechas = new Date(nIni.getUTCFullYear() + "/" + (nIni.getUTCMonth() + 1) + "/" + nIni.getUTCDate()).toLocaleString("es-ES", { weekday: "long", });
    //condicionamos a que solo vamos se agrupen días de la semana
    if (alfafechas != 'sábado' && alfafechas != 'domingo') {
    var sCadena = sCadena + "," + fechas;
  }
  }
  while (nIni < nFin);
  var resultado = sCadena.toString().split(",");
  var ncadena = resultado.shift();
  return [resultado]
};

Como tenemos la oportunidad de obtener el literal del día de la semana de cada fecha que se va generando:

let alfafechas = new Date(nIni.getUTCFullYear() + "/" + (nIni.getUTCMonth() + 1) + "/" + nIni.getUTCDate()).toLocaleString("es-ES", { weekday: "long", });

Podemos incluir una condición para que no tenga en cuenta los días sábado y domindo:

if (alfafechas != 'sábado' && alfafechas != 'domingo') {
    var sCadena = sCadena + "," + fechas;
  }

Así solo vamos a obtener los días de la semana, es decir, los días laborales. Y además si necesitamos excluir cualquier otro día, solo tenemos que indicarlo en la condición.

Este es el resultado:

Sin duda, es una forma de obtener estos datos con Typescript. Espero que sea de utilidad!!

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies

Comparte este post

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies