Introducción
Hoy veremos cómo obtener el número de días que tiene un mes de cualquier año. Por ejemplo, el mes de Abril del 2018 tiene 30 días, pero bien sabemos que esto cambia dependiendo del mes y también del año (si es o no bisiesto).
Así que investigando me encontré con una función sencillísima de implementar.
Dicho con otras palabras, estimaremos o calcularemos el número o cantidad de días que tiene determinado mes del año actual o de un año cualquiera.
La función que escribiremos devolverá el número entero de días que hay en un mes.
Obtener días que tiene un mes
Aquí la función:
function diasEnUnMes(mes, año) {
return new Date(año, mes, 0).getDate();
}
Recibe dos parámetros: el año y el mes, como números. Enero quiere decir 1, Febrero 2, etcétera. El año debe ser algo como 2015, 2016, etcétera.
Nota: esta función, y sólo esta función, cuenta los meses desde el 1 (enero es 1, diciembre 12) pero normalmente, Javascript cuenta los meses desde 0 (enero es 0, diciembre 11). Lo digo para evitar confusiones.
Algunos ejemplos de llamada…
Todo correcto. Pero podemos mejorar nuestra función
Obtener días del mes por nombre
Mejoremos la función para que reciba el nombre del mes y en base a ello devuelva sus días, así evitamos confusiones calculando el número. Queda así:
function diasEnUnMes(mes, año) {
mes = mes.toUpperCase();
var meses = ["ENERO", "FEBRERO", "MARZO", "ABRIL", "MAYO", "JUNIO", "JULIO", "AGOSTO", "SEPTIEMBRE", "OCTUBRE", "NOVIEMBRE", "DICIEMBRE"];
return new Date(año, meses.indexOf(mes) + 1, 0).getDate();
}
Lo único que hacemos es primeramente convertir el nombre a mayúsculas, buscar su índice y sumarle 1. Dado que los meses están ordenados, sólo tenemos que sumar 1.
Por ejemplo, enero tiene el índice 0, pero al sumarle 1 se convierte en 1. Igual diciembre, tiene el 11 pero le sumamos 1 para que se convierta en 12.
Al llamar a la función pasa esto…
Obtener días del mes y año actual
Finalmente veamos cómo obtener los días del mes actual. Sólo tenemos que modificar un poco la función original.
function diasDelMesYAñoActual() {
var fecha = new Date();
return new Date(fecha.getFullYear(), fecha.getMonth() + 1, 0).getDate();
}
Lo que hacemos ahora es crear un nuevo objeto con la fecha actual, obtener el mes y año. Es importante notar que al mes le sumamos uno porque, como ya expliqué arriba, esta función cuenta los meses desde el 1 pero Javascript desde 0.
Si la ejecuto al momento de escribir esto…
Conclusión
Qué fácil e inteligente es este método, aunque yo no soy el autor, yo simplemente trato de explicarlo y facilitar su uso. El autor es quien respondió a esta pregunta de StackOverflow.
Genial la función salvo que fallara si no indicas que cambien la ñ por una n, saludos!
En mi caso no pasa nada si invoco a la función con la variable con ese nombre, de igual manera gracias por tu comentario, ayudará a gente que se encuentre con el mismo problema.
No olvides seguirme y compartir 🙂