Otras funciones de la librería del calendario

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

Comentarios
Fueron enviados 5 comentarios al artículo
3 comentarios no revisados
2 comentarios revisados:
Por: Fernando Cuadrado
28/1/04
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: Juan Pablo
14/4/05
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 :)

Manuales relacionados
Categorias relacionadas
El autor
Lectura recomendada
Compra este libro en Agapea, la librería urgente a domicilio.
Últimas noticias
Alojados en el grupo