6 febrero, 2025

OBTENER ESTACIÓN DEL AÑO A PARTIR DE UNA FECHA CON TYPESCRIPT UTILIZANDO MATRICES O CONDICIONES

Hola a todos!

Hoy me gustaría escribir sobre el uso de sentencias condicionales y también sobre matrices con typescript. El ejemplo que me va a servir para introducir este tema es la asignación a una fecha de la estación del año en la que se encuentra.

Para ello voy a utilizar los siguientes parámetros para definir cada estación.

  • Invierno: inicia el 21 de diciembre y finaliza el 20 de marzo.
  • Primavera: inicia el 21 de marzo al 20 de junio.
  • Verano: inicia el 21 de junio y finaliza el 22 de septiembre.
  • Otoño: inicia el 23 de septiembre y finaliza el 20 de diciembre.

Y ahora tendremos en cuenta una serie de fechas que he generado de forma aleatoria:

Voy a utilizar dos códigos que he programado para llegar el mismo resultado, el primero es utilizando únicamente condicionales según el mes y el día:

function main(workbook: ExcelScript.Workbook) {
  const miHoja = workbook.getWorksheet("Hoja1");
  const valores = miHoja.getUsedRange().getValues();
  const scadena: (string | number)[][] = [["ESTACIÓN CODIGO 1"]];
  valores.splice(1).forEach((row) => {
    //Obtenemos fecha, mes y dia
    var ini = new Date(Math.round((+row[0] - 25569) * 86400 * 1000)).toLocaleDateString("en-US");
    var nIni = new Date(Date.parse(ini) + 1 * 24 * 60 * 60 * 1000);
    var mes = (nIni.getUTCMonth() + 1)
    var dia = nIni.getUTCDate()
    var estacion = ""
   //Utilizamos condiciones para indicar la estación
    if (mes == 1 || mes == 2 || mes == 3) {
      estacion = 'Invierno';
    } else if (mes == 4 || mes == 5 || mes == 6) {
      estacion = 'Primavera';
    } else if (mes == 7 || mes == 8 || mes == 9) {
      estacion = 'Verano';
    } else {
      estacion = 'Otoño';
    }
    //Completamos días
    if (mes == 3 && dia > 20) {
      estacion = 'Primavera';
    } else if (mes == 6 && dia > 20) {
      estacion = 'Verano';
    } else if (mes == 9 && dia > 22) {
      estacion = 'Otoño';
    } else if (mes == 12 && dia > 20) {
      estacion = 'Invierno';
    }
    scadena.push(
      [estacion]
    )
  });
  const hojaDest = workbook.getWorksheet("Hoja1");
  const resultado = hojaDest.getRangeByIndexes(0, 1, scadena.length, scadena[0].length);
  resultado.setValues(scadena);
}

Como podéis observar primero identificamos las estaciones según meses completos y a continuación identificamos y completamos según los días específicos. Aquí lo relevante es forma en la que realizamos la programación y la introducción de los operadores: igual (==), y (&&), o(||).

Para finalizar, en la siguiente rutina he decisión introducir matrices en la parte en la que asignamos los meses completos a las estaciones:

function main(workbook: ExcelScript.Workbook) {
    const miHoja = workbook.getWorksheet("Hoja1");
    const valores = miHoja.getUsedRange().getValues();
    const scadena: (string | number)[][] = [["ESTACIÓN CODIGO 2"]];
    valores.splice(1).forEach((row) => {
        //obtenemos fecha, dia y mes
        var ini = new Date(Math.round((+row[0] - 25569) * 86400 * 1000)).toLocaleDateString("en-US");
        var nIni = new Date(Date.parse(ini) + 1 * 24 * 60 * 60 * 1000);
        var mes = nIni.getUTCMonth() + 1
        var dia = nIni.getUTCDate()
        var estacion = ""
        //generamos matrices con los meses del año
        var invierno = [1, 2, 3];
        var primavera = [4, 5, 6];
        var verano = [7, 8, 9];
        //trabajamos las condiciones
        if (invierno.includes(mes)) {
            estacion = 'Invierno';
        } else if (primavera.includes(mes)) {
            estacion = 'Primavera';
        } else if (verano.includes(mes)) {
            estacion = 'Verano';
        } else estacion = 'Otoño';
        //completamos tramos de días
        if (mes == 3 && dia > 20) {
            estacion = 'Primavera';
        } else if (mes == 6 && dia > 20) {
            estacion = 'Verano';
        } else if (mes == 9 && dia > 22) {
            estacion = 'Otoño';
        } else if (mes == 12 && dia > 20) {
            estacion = 'Invierno';
        }
        scadena.push(
            [estacion]
        )
    });
    const hojaDest = workbook.getWorksheet("Hoja1");
    const resultado = hojaDest.getRangeByIndexes(0, 2, scadena.length, scadena[0].length);
    resultado.setValues(scadena);
}

Podéis observar que primero creo tres matrices para indicar los meses de tres estaciones:

//generamos matrices con los meses del año
        var invierno = [1, 2, 3];
        var primavera = [4, 5, 6];
        var verano = [7, 8, 9];

Y para detectar en que matriz se encuentra el mes con el que estemos iterando utilizamos la función .includes():

//trabajamos las condiciones
        if (invierno.includes(mes)) {
            estacion = 'Invierno';
        } else if (primavera.includes(mes)) {
            estacion = 'Primavera';
        } else if (verano.includes(mes)) {
            estacion = 'Verano';
        } else estacion = 'Otoño';

Como siempre, he disfrutado mucho creando esta publicación y espero que sea de utilidad.

Por cierto, os deseo a todos una estupenda Feliz Navidad!!.

¿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