dominios y alojamiento web en hostalia

Cálculo de los días de un mes en PHP

29 de abril de 2003
Valoración del artículo:
Realizamos una función que calcula el número de días de un mes en PHP. Que podremos utilizar en el calendario en PHP.
Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.
A continuación vamos a ver una sencilla manera de codificar una función en PHP que realiza el cálculo de los días de un mes, teniendo en cuenta si el mes tiene 30 o 31 días así como si es febrero de un mes bisiesto, etc.

Esta función es UltimoDia() que hemos utilizado ya en alguna ocasión para el manual de calendario en PHP. Está creada de manera "artesanal", Aunque PHP actualmente contiene algunas funciones que nos pueden ayudar a hacer este mismo trabajo sin tener que realizar nosotros mismos los cálculos.

Nota: La función UltimoDia() hace un cálculo de cuál es el último día de un mes. La hemos utilizado con anterioridad (una versión distinta de la presente) para realizar el Manual del calendario en PHP.

No es necesario hacer un ciclo repetitivo para la función UltimoDia(), es un poco más simple de resolver.

Los meses 1,3,5,7,8,10,12 siempre tienen 31 días, los meses 4,6,9,11 siempre tienen 30 días, el único problema es el mes de febrero dependiendo del año puede tener 28 o 29 días, pero ese cálculo tampoco es dificil.

Aquí envío el código para la función UltimoDía(), que ojalá les sirva...

Nota: Por favor, leer los comentarios que han enviado otros visitantes de DesarrolloWeb.com que proponen códigos para hacer esta misma funcionalidad pero de una manera muchísimo más elegante, corta, sencilla y sin posibilidad de errores. Gracias a todas las personas que han comentado y aportado algo más a este artículo!!!!!

function UltimoDia($anho,$mes){
   if (((fmod($anho,4)==0) and (fmod($anho,100)!=0)) or (fmod($anho,400)==0)) {
       $dias_febrero = 29;
   } else {
       $dias_febrero = 28;
   }
   switch($mes) {
       case 01: return 31; break;
       case 02: return $dias_febrero; break;
       case 03: return 31; break;
       case 04: return 30; break;
       case 05: return 31; break;
       case 06: return 30; break;
       case 07: return 31; break;
       case 08: return 31; break;
       case 09: return 30; break;
       case 10: return 31; break;
       case 11: return 30; break;
       case 12: return 31; break;
   }
}

Compartir en redes sociales

Comentarios
Fueron enviados 10 comentarios al artículo
10 comentarios revisados:
Por: tisasia
26/8/2003
Con las siguientes lineas de codigo calculamos el primer y el ultimo dia de cada mes:

$first_of_month = mktime (0,0,0, $month, 1, $year);
$maxdays = date('t', $first_of_month);

y funciona para cualquier año y mes (incluidos bisiestos)

Salu2 a to2......

Por: bricomaniaco
17/3/2004
como el año gregoriano es un poco más corto que el verdadero o año trópico, se suprimen tres bisiestos cada 400 años, en los años seculares no divisibles por 400, tales como 1700, 1800, 1900 y 2100. Tenedlo en cuenta en este tipo de algoritmos...
Por: [Ph03n1X]
19/10/2004
Nunca está de más asegurarse que el servidor trabaja con el formato de fecha correcto y especificárselo con la siguiente línea:

setlocale (LC_TIME,"spanish");

Por: Dany
02/8/2006
La verdad asi como asi no me funciono
uso PHP 5.1.4 y la funcion no devolvia ningun valor :S
la verdad no entendi por que...
tambien probe con mktime y el script se colgaba...
en fin para quienes les suceda lo mismo solucione el problema modificando este script de la sgte forma:

function UltimoDiaMes($anho,$mes){

if (((fmod($anho,4)==0) and (fmod($anho,100)!=0)) or (fmod($anho,400)==0)) {
$dias_febrero = 29;
} else {
$dias_febrero = 28;
}
$dias=31;
switch($mes) {
case 01: $dias = 31; break;
case 02: $dias = $dias_febrero; break;
case 03: $dias = 31; break;
case 04: $dias = 30; break;
case 05: $dias = 31; break;
case 06: $dias = 30; break;
case 07: $dias = 31; break;
case 08: $dias = 31; break;
case 09: $dias = 30; break;
case 10: $dias = 31; break;
case 11: $dias = 30; break;
case 12: $dias = 31; break;

}

return $dias;

}

las gracias van igual para quien escribio el articulo creo q fue Héctor A. Pinto F

salu2 Atte. Dany Jaque. Estudiante Informática UCT
Por: pablo
02/7/2007
En mi opinión es mucho más profesional usar la función checkdate() que comprueba si una fecha es correcta, ya que lo anterior no sería válido para días bisiestos. Ejemplo:

$dia = 1;
while( checkdate($mes,$dia,$año) )
{
echo $dia."<br />";
$día++;
}

Que nos daría una lista de días del $mes y $año indicados.

Saludos,
Por: Akira
05/12/2008
¡Qué zoquete! La función Date te informa directamente del número de días de un mes determinado. Parece mentira que te metas a enseñar antes de aprender tú mismo.
¿Año bisiesto?
Por: Dr. Trucho
30/4/2009
Digo yo, que si en vez de escribir todo esto:
if (((fmod($anho,4)==0) and (fmod($anho,100)!=0)) or (fmod($anho,400)==0)) {
$dias_febrero = 29;
} else {
$dias_febrero = 28;
}
utilizamos:
if (date("L")==1) {
$dias_febrero = 29;
} else {
$dias_febrero = 28;
}

¿No sería más sencillo?
Chequen esta funcion
23/12/2009
cal_days_in_month(1,$mes,$anno);
y da el numero de dias que tiene el mes de acuerdo al año proporcionado.

fxzabal...
Agradecimiento
03/3/2010
Excelente el tutorial, yo acabo de modificarlo para que desde mi base de datos mysql lea mis eventos y me los marque en el calendario, y todo funciona calidad.

Muchas gracias por esta gran ayuda!...
calendario
Por: pedro
20/11/2010
ok estoy trabajando con Kumbia y no puedo hacer funcionar estos codigos si alguien me ayuda

Manuales relacionados
Categorias relacionadas
El autor
Héctor A. Pinto F
Ingeniero en Informática. Santiago de Chile.
Lectura recomendada
Compra este libro en Agapea, la librería urgente a domicilio.
Últimas noticias
Donaciones
Si piensas que te hemos ayudado y merecemos tu apoyo económico...