Como dibujar un calendario en una página Web.
El método para dibujar un calendario consta de 4 pasos que son:
- Colocar el encabezado es decir, los nombres de los dÃas en la parte superior del calendario (ver el diagrama).
- Dibujar las celdas vacÃas que corresponden a los últimos dÃas del mes anterior. Estos no son de nuestro interés, por lo que podemos simplemente dibujar cuadros en blanco.
- En un ciclo desde 1 a 31 (o al número de dÃas que tenga el mes), dibujamos cada celda imprimiendo el número dentro de ella.
Aquà debemos checar que cada vez que sea sábado, hacemos un salto de lÃnea.
- De manera opcional, podemos imprimir los últimos cuadros del mes.
Entonces, resumiendo, tenemos que los pasos son:
- Poner los encabezados
- Un ciclo para poner cuadros vacÃos
- Un ciclo para los dÃas del mes
- Un ciclo para poner cuadros vacÃos
Este algoritmo se puede implementar en cualquier lenguaje.
A continuación, se presenta el código en PHP que imprime el calendario de enero de 2007 (NOTA: Se puede adaptar fácilmente para que imprima el del mes actual):
$a=2007; //<--- Año $m=1; // y mes a mostrar $meses_nombres=Array(1=>"Enero","Febrero","Marzo","Abril","Mayo", "Junio","Julio", "Agosto","Septiembre","Octubre", "Noviembre","Diciembre"); //<- Para que aparezca en español.
if ($a>=0 && $a<30) $a+=2000; // <-- normalizamos el año if ($a>=30 && $a<100) $a+=1900; // a 4 dÃgitos.
$dat=mktime(0, 0, 0, $m, 1, $a); //<-- Creamos una fecha del dÃa primero del mes (01/$m/$a) $diasemana= date("w",$dat); // <-- determinamos en que dÃa de la semana cae el dÃa primero $totaldias=date("t",$dat); // <-- determinamos el total de dÃas del mes (28,29,30 ó 31)
/* **************************** PASO 1: Encabezados ****************************** */ echo "<table border=1>"; echo "<tr><td>Dom</td><td>Lun</td><td>Mar</td> <td>Mie</td><td>Jue</td><td>Vie</td><td>Sab</td></tr>";
/* **************************** PASO 2: Celdas vacÃas ****************************** */ echo "<tr>"; for($i=0; $i<$diasemana; $i++) { echo "<td></td>"; }
/* **************************** PASO 3: DÃas del mes ****************************** */ for($d=1; $d<=$totaldias; $d++) { $dat=mktime(0, 0, 0, $m, $d, $a); //<-- Creamos una fecha del dÃa en curso $diasemana= date("w",$dat); // para poder determinar el dÃa de la semana echo "<td align='right'>$d</td>"; if ($diasemana==6) //<-- si es sábado, cerramos el renglon y comenzamos uno nuevo echo "</tr><tr>"; } /* **************************** PASO 4: cuadros vacÃos al final (omitido) ****************************** */ echo "</tr>"; echo "</table>"; |
|