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:
![](https://i0.wp.com/excelsignum.com/wp-content/uploads/2022/12/OBTENER-ESTACION-DEL-ANO-A-PARTIR-DE-UNA-FECHA-CON-TYPESCRIPT-UTILIZANDO-MATRICES-O-CONDICIONES.png?resize=570%2C746&ssl=1)
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.
![](https://i0.wp.com/excelsignum.com/wp-content/uploads/2022/12/OBTENER-ESTACION-DEL-ANO-A-PARTIR-DE-UNA-FECHA-CON-TYPESCRIPT-UTILIZANDO-MATRICES-O-CONDICIONES2.png?resize=1024%2C513&ssl=1)
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.
¡¡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