Weblog de Antonio Ríos

Calendario simple con PHP5

CalendarioHola, ¿cómo van?, hoy haremos un calendario simple con PHP, nos mostrará del mes y año actual, para ello utilizaremos clases, este ejemplo es sólo didáctico, uds. podrán mejorarlo a su gusto.

Para los que necesiten este calendario en JavaScript pueden acceder aqui.

calendario.clase.php

<?phpclass calendario {
var $di=1; var $me; var $an; var $fechaActual; var $diaMes; var $diaSemana;
var $meses = array(1=>”Enero”,2=>”Febrero”,3=>”Marzo”,
4=>”Abril”,5=>”Mayo”,6=>”Junio”,
7=>”Julio”,8=>”Agosto”,9=>”Setiembre”,
10=>”Octubre”,11=>”Noviembre”,12=>”Diciembre”);
}

?>

Creamos los siguientes atributos de la clase:

di, me, an = para almacenar valores de la fecha actual (dia, mes, año)

fechaActual = almacenará la fecha actual

diaMes = almacenará la cantidad de días máxima del mes, por decir feb = 28 ó 29, jun = 30, jul = 31, etc.

diaSemana = almacenará el día de la semana (0-Domingo hasta 6-Sábado), necesario para los cortes de línea.

meses = arreglo que contiene los meses para nuestro idioma, PHP trabaja por defecto en inglés, este arreglo nos servirá para el cambio.

Luego creamos el construct que se ejecutará apenas instanciemos la clase, se inicializará las propiedades.

function __construct() {
$this->an = date(“Y”);
$this->me = date(“n”);
$this->fechaActual = mktime(0,0,0,$this->me,$this->di,$this->an);
$this->mostrar_mes();
}
}

Seguidamente creamos el método de la clase mostrar_mes que dibujará el mes en el navegador.

}

function mostrar_mes() {
$this->diaMes = date(“t”,$this->fechaActual);
echo “<table border=’1′ cellpadding=’3′ cellspacing=’0′>\n”;
echo “<tr>”;
echo “<td colspan=’7′ align=’center’>”.$this->meses[$this->me].”</td>”;
echo “</tr>\n”;
echo “<tr><td align=’center’>D</td>”;
echo “<td align=’center’>L</td>”;
echo “<td align=’center’>M</td>”;
echo “<td align=’center’>M</td>”;
echo “<td align=’center’>J</td>”;
echo “<td align=’center’>V</td>”;
echo “<td align=’center’>S</td></tr>\n”;
$this->diaSemana=date(“w”,mktime(0,0,0,$this->me,1,$this->an));
if ($this->diaSemana != 0) {
echo “<tr>”;
for ($i = 0; $i < $this->diaSemana; $i++) {
echo “<td> </td>”;
}
}
for ($i=1; $i<=$this->diaMes; $i++) {
$this->diaSemana=date(“w”,mktime(0,0,0,$this->me,$i,$this->an));
if ($this->diaSemana == 0) {
echo “<tr>”;
}
echo “<td align=’center’>”.$i.”</td>”;
if ($this->diaSemana == 6) {
echo “</tr>\n”;
}
}

for ($i = $this->diaSemana; $i < 6; $i++) {
echo “<td> </td>”;
}
echo “</tr></table>”;
}

}

Comentamos algunas líneas

$this->diaMes = date(“t”,$this->fechaActual);

Almacenamos en diaMes, y seguidamente la cabecera del calendario que contiene el mes

echo “<table border=’1′ cellpadding=’3′ cellspacing=’0′>\n”;
echo “<tr>”;
echo “<td colspan=’7′ align=’center’>”.$this->meses[$this->me].”</td>”;
echo “</tr>\n”;
echo “<tr><td align=’center’>D</td>”;
echo “<td align=’center’>L</td>”;
echo “<td align=’center’>M</td>”;
echo “<td align=’center’>M</td>”;
echo “<td align=’center’>J</td>”;
echo “<td align=’center’>V</td>”;
echo “<td align=’center’>S</td></tr>\n”;

Nuestro calendario está inicializado en domingo, como el primer día del mes no siempre empieza en domingo, necesitaremos rellenar de celdas en blanco hasta que sea primero, por ello primero necesitamos saber que día de semana cae primero.

$this->diaSemana=date(“w”,mktime(0,0,0,$this->me,1,$this->an));

if ($this->diaSemana != 0) {
echo “<tr>”;
for ($i = 0; $i < $this->diaSemana; $i++) {
echo “<td> </td>”;
}
}

Luego empezamos a imprimir los días teniendo en cuenta que si el día cae 0=domingo se crea una nueva fila de tabla y si el día cae 6=sábado se cierra la fila.

for ($i=1; $i<=$this->diaMes; $i++) {
$this->diaSemana=date(“w”,mktime(0,0,0,$this->me,$i,$this->an));
if ($this->diaSemana == 0) {
echo “<tr>”;
}
echo “<td align=’center’>”.$i.”</td>”;
if ($this->diaSemana == 6) {
echo “</tr>\n”;
}
}
Por último completamos el calendario con espacios si el último día no cae sábado.

for ($i = $this->diaSemana; $i < 6; $i++) {
echo “<td> </td>”;
}
echo “</tr></table>”;

Finalmente instanciamos a la clase y vemos los resultados…

$clCal = new calendario();

Si desean que no se muestre el contenido apenas se instancia borran la línea en el constructor $this->mostrar_mes y lo instanciariamos y ejecutaríamos el método así:

$clCal = new calendario();
$clCal->mostrar_mes();

Son dos formas… hasta pronto…

Junio 22, 2008 - Publicado por antoniorios | Php5 | | 1 comentario

1 comentario »

  1. Hola hermano, otra vez yo necesito tu gran ayuda… con mktime vale espero tu respuesta :D GRACIAs

    comentario por isaac | Julio 8, 2008 | Responder


Deja un comentario