dominios y alojamiento web en hostalia

Otras funciones de la librería del calendario

21 de febrero de 2002
Valoración del artículo:
Vemos otras funciones de manejo de fechas que utilizamos en el ejecicio del Calendario PHP.
Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.
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.

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.

Compartir en redes sociales

Comentarios
Fueron enviados 5 comentarios al artículo
5 comentarios revisados:
Por: Fernando Cuadrado
28/1/2004
El break, no debe utilizarse para frenar la funcion, el recurso existe únicamente como alternativa, un algoritmo debe ejecutarse hasta el final de su cometido. La funcion Switch accede una sola vez al case, por lo que el break esta redundante.

Quizá hubiese sido mas práctico:
function dame_nombre_mes($mes){

$meses = array("1" => "Enero", "2" => "Febrero", "3" => "Marzo", "4" => "Abril", "5" => "Mayo", "6" => "Junio", "7" => "Julio", "8" => "Agosto", "9" => "Septiembre", "10" => "Octubre", "11" => "Noviembre", "12" => "Diciembre",);

return $meses[$mes];
}

Lo describo aqui en una funcion pero con la creacion del array de forma independiente bastaria.
Hago esta aclaracion porque me parece interesante el script en su totalidad, me a servido y agradezco a quien se tomo el tiempo de pensarlo.
Por: N4x0
08/7/2004
También se podría definir un array escalar, cuyo primer indice no valdria (por que sería el mes 0).
Por: Juan Pablo
14/4/2005
La funcion ultimo dia se puede remplazar por algo asi
date('d-m-y',strtotime('1 $month $year -1 day')) y te va a devolver el ultimo dia del mes anterior :)
Por: Gustavo
13/7/2006
Si este if da verdadero es año bisiesto:
if (((fmod($anho,4)==0) && (fmod($anho,100)!=0)) || (fmod($anho,400)==0))

adrolma...
función ultimoDia($mes,$ano)
13/10/2011
bastaría hacer
$diasMes = date('t', mktime(0,0,0,$mes,$dia,$ano));
pero con el $dia puesto a 1 por ejemplo, si está a nul devuelve valor incorrecto.

Manuales relacionados
Categorias relacionadas
El autor
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...