Vemos otras funciones de manejo de fechas que utilizamos en el ejecicio del Calendario PHP.
Hemos avanzado bastante ya en la práctica del Calendario PHP. Anteriormente hemos visto las funciones más importantes que implementan nuestro calendario, pero hay otras que serán importantes para completar el trabajo.
La fecha la recibe la función con el valor del día, mes y año, pasado en variables independientes. El código es el siguiente:
function calcula_numero_dia_semana($dia,$mes,$ano){
$numerodiasemana = date('w', mktime(0,0,0,$mes,$dia,$ano));
if ($numerodiasemana == 0)
$numerodiasemana = 6;
else
$numerodiasemana--;
return $numerodiasemana;
}
Primero obtenemos el número de día de la semana que nos ofrece PHP a través de la función date(). Como PHP, al igual que la mayoría de los sistemas, está pensado en inglés, y para él, el numero de la semana correspondiente a domingo es el 0, el del lunes es el 1. Por eso tenemos unas líneas de código para convertir el número de la semana del "inglés al español".
function ultimoDia($mes,$ano){
$ultimo_dia=28;
while (checkdate($mes,$ultimo_dia + 1,$ano)){
$ultimo_dia++;
}
return $ultimo_dia;
}
Para hallar ese dato vamos a utilizar una pequeña treta que consiste en suponer que el mes tiene 28 días como mínimo y empezar a validar cada uno de los días siguientes hasta que la fecha que estamos construyendo sea incorrecta. En ese caso querrá decir que el número de días es 1 menos que los que tenemos en el momento de fallar la fecha.
Por poner un ejemplo, para enero, empezaríamos por 28. Entonces validamos el día siguiente (29). Como es correcta la fecha "29 de enero de una año cualquiera", acumulamos 1 en la variable $ultimo_dia para situarnos en esa fecha válida. Posteriormente, validamos el 30 de enero, que también es correcta, entonces volvemos a acumular 1 en la variable para situarnos en esa nueva fecha correcta... así hasta que intentemos validar la fecha "32 de enero" que será la primera que falle. Entonces paramos el bucle y dejamos de acumular a la fecha que teníamos, que era válida. Esto funciona bien para cualquier mes, incluso para febrero, sea el año bisiesto o no.
function dame_nombre_mes($mes){
switch ($mes){
case 1:
$nombre_mes="Enero";
break;
case 2:
$nombre_mes="Febrero";
break;
case 3:
$nombre_mes="Marzo";
break;
case 4:
$nombre_mes="Abril";
break;
case 5:
$nombre_mes="Mayo";
break;
case 6:
$nombre_mes="Junio";
break;
case 7:
$nombre_mes="Julio";
break;
case 8:
$nombre_mes="Agosto";
break;
case 9:
$nombre_mes="Septiembre";
break;
case 10:
$nombre_mes="Octubre";
break;
case 11:
$nombre_mes="Noviembre";
break;
case 12:
$nombre_mes="Diciembre";
break;
}
return $nombre_mes;
}
Con esto hemos acabado el ejercicio del calendario PHP. Aunque seguro que habrá hecho falta un esfuerzo por vuestra parte, esperamos que las explicaciones hayan sido suficientes y podáis entenderlo bien.
Para acabar, dejamos un enlace para Ver el calendario en funcionamiento.
En este capítulo documentaremos las funciones que venimos utilizando para la creación del calendario, que se encuentran dentro de la librería calendario.php, al igual que las funciones de mostrar_calendario() y formularioCalendario().
Función calcula_numero_dia_semana($dia,$mes,$ano)
Esta función calcula el número de día de la semana de una fecha indicada por parámetro. El número de día de la semana que devuelve corresponde con 0 en el caso de que la fecha sea un lunes, 1 en caso de ser martes, y así hasta llegar al 6, que corresponde con el domingo.La fecha la recibe la función con el valor del día, mes y año, pasado en variables independientes. El código es el siguiente:
function calcula_numero_dia_semana($dia,$mes,$ano){
$numerodiasemana = date('w', mktime(0,0,0,$mes,$dia,$ano));
if ($numerodiasemana == 0)
$numerodiasemana = 6;
else
$numerodiasemana--;
return $numerodiasemana;
}
Primero obtenemos el número de día de la semana que nos ofrece PHP a través de la función date(). Como PHP, al igual que la mayoría de los sistemas, está pensado en inglés, y para él, el numero de la semana correspondiente a domingo es el 0, el del lunes es el 1. Por eso tenemos unas líneas de código para convertir el número de la semana del "inglés al español".
Función ultimoDia($mes,$ano)
Sirve para devolver el último día de un mes y año indicados por parámetro. El último día del mes se refiere al número de días que tiene un mes. Por ejemplo en enero 31, febrero 28 ó 29, ... diciembre 31.function ultimoDia($mes,$ano){
$ultimo_dia=28;
while (checkdate($mes,$ultimo_dia + 1,$ano)){
$ultimo_dia++;
}
return $ultimo_dia;
}
Para hallar ese dato vamos a utilizar una pequeña treta que consiste en suponer que el mes tiene 28 días como mínimo y empezar a validar cada uno de los días siguientes hasta que la fecha que estamos construyendo sea incorrecta. En ese caso querrá decir que el número de días es 1 menos que los que tenemos en el momento de fallar la fecha.
Por poner un ejemplo, para enero, empezaríamos por 28. Entonces validamos el día siguiente (29). Como es correcta la fecha "29 de enero de una año cualquiera", acumulamos 1 en la variable $ultimo_dia para situarnos en esa fecha válida. Posteriormente, validamos el 30 de enero, que también es correcta, entonces volvemos a acumular 1 en la variable para situarnos en esa nueva fecha correcta... así hasta que intentemos validar la fecha "32 de enero" que será la primera que falle. Entonces paramos el bucle y dejamos de acumular a la fecha que teníamos, que era válida. Esto funciona bien para cualquier mes, incluso para febrero, sea el año bisiesto o no.
Función dame_nombre_mes($mes)
Devuelve el nombre del mes que recibe como número en el parámetro. Ejemplo sencillo donde los haya, sólo tiene una estructura switch que asigna un mombre de mes para cada valor del parámetro.function dame_nombre_mes($mes){
switch ($mes){
case 1:
$nombre_mes="Enero";
break;
case 2:
$nombre_mes="Febrero";
break;
case 3:
$nombre_mes="Marzo";
break;
case 4:
$nombre_mes="Abril";
break;
case 5:
$nombre_mes="Mayo";
break;
case 6:
$nombre_mes="Junio";
break;
case 7:
$nombre_mes="Julio";
break;
case 8:
$nombre_mes="Agosto";
break;
case 9:
$nombre_mes="Septiembre";
break;
case 10:
$nombre_mes="Octubre";
break;
case 11:
$nombre_mes="Noviembre";
break;
case 12:
$nombre_mes="Diciembre";
break;
}
return $nombre_mes;
}
Con esto hemos acabado el ejercicio del calendario PHP. Aunque seguro que habrá hecho falta un esfuerzo por vuestra parte, esperamos que las explicaciones hayan sido suficientes y podáis entenderlo bien.
Para acabar, dejamos un enlace para Ver el calendario en funcionamiento.
Nota:
Hasta aquí hemos construido un calendario más o menos funcional, que permite mostrar cualquier mes y año. Claro que para ponerlo en producción seguramente necesitaremos trabajar un poco más para hacer cosas como que se pueda seleccionar un día, se marquen los días festivos con otro color, etc. En los próximos artículos del Manual del Calendario PHP abordaremos algunas de las necesidades que los desarrolladores se puedan plantear para usar este calendario.
Miguel Angel Alvarez
Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...