Calendario simple con PHP5
Hola, ¿cómo van?, hoy haremos un calendario simple con PHP, nos mostrará el mes y año actual, para ello utilizaremos clases, este ejemplo es sólo didáctico, uds. podrán mejorarlo a su gusto, como tarea podría ser crear un calendario completo enviando como parámetro el año y listar todos los meses.
Para los que necesiten este calendario en JavaScript pueden acceder aqui.
calendario.clase.php
< ?php class 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><tr>"; } echo "<td align='center'>".$i."</td>"; if ($this->diaSemana == 6) { echo "</tr>\n"; } } for ($i = $this->diaSemana; $i < 6; $i++) { echo "<td> "; } echo "</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…
esta muy buena la clase pero podrias poenr algo de como usarla..ya que soy nuevo en esto gracias
thanks much, guy
And I liked, will be looking at your site.
thanks much, guy