24 septiembre, 2023

CUSTOM FUNCTION PARA GENERAR LISTA DE FECHAS ENTRE DOS FECHAS CON TYPESCRIPT

Buenos días a todos,

Como complemento a la publicación anterior en el que creamos una automatización con Typescript para obtener la relación de fechas entre dos fechas. Hoy voy a publicar el primero de dos post en el que voy a emular el mismo ejercicio pero con una función personalizada (custom function). El segundo de los post será para generar únicamente los días laborables entre dos fechas.

Esto es lo que queremos conseguir a partir de dos fechas (inicio y fin):

Como podéis observar es una fórmula de matriz dinámica que derrama el resultado en las celdas adyacentes. Pero, ¿cómo lo hacemos?. Bien, os presento la siguiente custom function que he creado para conseguirlo:


/**
 * @customfunction
 * @param {number[][]}
 * @returns {string[][]} 
 */
function fechasEntre(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();
  var sCadena = sCadena + "," + fechas;}
  while (nIni < nFin);
  var resultado = sCadena.toString().split(",");
  var ncadena = resultado.shift();
  return [resultado]
};

La función se ejecuta seleccionando la fecha de inicio y final en las celdas de la hoja o, si se quiere escribir en la función, sería necesario introducir los argumentos utilizando la función FECHANUMERO(), utilizando el ejemplo inicial:

=TRANSPONER(SCRIPTLAB.BLANKSNIPPET.FECHASENTRE(FECHANUMERO("21/04/2022");FECHANUMERO("30/04/2022")))

El motivo es que la fecha en la celda la captura como número, y si la queremos escribir en el argumento, debemos pasarla a número para que funcione correctamente.

Y esto es todo, espero que os sea de utilidad. El próximo día os paso el ejemplo con días laborables.

¿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