PHP:¿Cómo puedo hacer un calendario?
De Foros del Web
Con las funciones mktime() y date() alcanza!!!
La mayoría del script funciona en base a la función mktime()
Código PHP:
<table> <?php include("funciones.php"); $mess = $_GET['mess']; $anio = $_GET['anio']; if($mess == "" || $anio == ""){ $anio = date("Y"); $mess = date("n"); } $ultimo = date("t",mktime(0, 0, 0, $mess, 1, $anio)); if($mess == '12' || $mess == '1'){ if($mess == '12'){ $next = 1; $prev = $mess -1; $anion = $anio + 1; $aniop = $anio; } if($mess == '1'){ $next = $mess + 1; $prev = 12; $anion = $anio; $aniop = $anio -1; } }else{ $next = $mess + 1; $prev = $mess - 1; $aniop = $anio; $anion = $anio; } echo "<tr><th colspan=7>$anioo</th></tr><tr>"; echo "<tr><td><a href='calendario.php?mess=$prev&anio=$aniop'><<</a></td><th colspan=5>$mes[$mess] $mess</th><td><a href='calendario.php?mess=$next&anio=$anion'>>></td></tr><tr>"; echo "<tr><td>D</td><td>L</td><td>M</td><td>M</td><td>J</td><td>V</td><td>S</td></tr>"; $diaa = "1"; while($diaa <= $ultimo){ $dia = date("D",mktime(0,0,0,$mess,$diaa,$anio)); # retorna el día de la semana en letras... $fecha = date("d",mktime(0,0,0,$mess,$diaa,$anio)); #retorna el día del mes en 01/31 $dia_semana = date("w",mktime(0,0,0,$mess,$diaa,$anio)); #retorna el día de la semana en número if($dia == "Sun"){ echo "</tr><tr>"; } if($fecha == "01"){ $i=0; while($i != $dia_semana){ echo "<td> </td>"; $i++; } } echo "<td>$fecha</td>"; $diaa++; } echo "</tr>"; ?> </table>
Primero verifico las variables $mess y $anio para saber que mes te tengo que mostrar por ejemplo si venis de febrero la variable mess tiene que tener el valor 1 porque al momento de imprimir el link de "Mes anterior" le puse 1 a la variable mess, y lo mismo con el año...en el caso de que quieras ver marzo las variables $mess vale 3 y así ...
Código PHP:
<? $mess = $_GET['mess']; $anio = $_GET['anio']; if($mess == "" || $anio == ""){ $anio = date("Y"); $mess = date("n"); }?>
Luego verifico la cantidad de días que tiene el mes a mostrar por ejemplo enero tiene 31 días, por lo tanto la variable $ultimo es igual a 31.
Código PHP:
<? $ultimo = date("t",mktime(0, 0, 0, $mess, 1, $anio)); ?>
Creo una réplica de la variable año, para despues hacer un control ... y en algunos casos cambiar el año.
Código PHP:
<? $ultimo = date("t",mktime(0, 0, 0, $mess, 1, $anio)); $anioo = $anio; if($mess == '12' || $mess == '1'){ if($mess == '12'){ $next = 1; $prev = $mess -1; $anion = $anio + 1; $aniop = $anio; } if($mess == '1'){ $next = $mess + 1; $prev = 12; $anion = $anio; $aniop = $anio -1; } }else{ $next = $mess + 1; $prev = $mess - 1; $aniop = $anio; $anion = $anio; } ?>
En este caso uso dos variables ... $aniop que hace referncia al año previo y $anion al próximo (next) esto me sirve para mostrar las flechitas << >> que serviría para moverse por los meses... dependiendo de cual sea el caso incremento o decremento luego imprimo...
Código PHP:
<? echo "<tr><th colspan=7>$anioo</th></tr><tr>"; echo "<tr><td><a href='calendario.php?mess=$prev&anio=$aniop'><<</a></td><th colspan=5>$mes[$mess] $mess</th><td><a href='calendario.php?mess=$next&anio=$anion'>>></td></tr><tr>"; echo "<tr><td>D</td><td>L</td><td>M</td><td>M</td><td>J</td><td>V</td><td>S</td></tr>"; ?>
Defino la variable $diaa que es para controlar el bucle que imprimirá los días del mes.
Código PHP:
<? $diaa = "1"; while($diaa <= $ultimo){ ?>
dentro del while ... uso la función mktime() para que me devuelva el día que en función a la variable $diaa
el mktime combinado con la función date() devuelve el dia de la semana sun mon thu wen .. una cosa así ... es para saber más en que casillero ponerlo ...
Código PHP:
<? $dia = date("D",mktime(0,0,0,$mess,$diaa,$anio)); ?>
Lo mismo hago con esta línea a diferencia que obtengo el día en números .. por ejemplo 01 02 03 04 05 06 etc ...
Código PHP:
<? $fecha = date("d",mktime(0,0,0,$mess,$diaa,$anio)); ?>
En $dia_semana almaceno el número de día de la semana .. el día 1 2 o 3 así hasta siete .. esto me sirve para el caso de cuando el día 1 de febrero empieza el día miercoles, entonces esto me sirve para saber en que casillero escribo la fecha ...
Código PHP:
<?PHP $dia_semana = date("w",mktime(0,0,0,$mess,$diaa,$anio)); ?>
Despues chequeo estas cosas...
Código PHP:
<?php if($dia == "Sun"){ echo "</tr><tr>"; } ?>
Si el día es igual domingo cierro la fila y abro una nueva .. dado de que el calendario lo imprimo asi ..
L M M J V S D
Despues pregunto si el día es primero, para saber cuántos casilleros me tengo que mover a la derecha .. acá es donde uso la variable $dia_semana
Código PHP:
<? if($fecha == "01"){ $i=0; while($i != $dia_semana){ echo "<td> </td>"; $i++; } } ?>
imprimo la variable $fecha e incremento la variable diaa que es la que controla el bucle ...
Código PHP:
<? echo "<td>$fecha</td>"; $diaa++; ?>
Recuerden que todo es en base a las funciones mktime y date
--turco_7 26 Feb 2006
Este artículo es parte de las FAQs de PHP y el Manual de PHP.
- Indice de las FAQs: Conceptos, Configuración, Formularios, Manejo de Archivos, Integración con Bases de Datos, Sesiones, Extensiones y Librerías, Seguridad, Funciones, Clases y Objetos, Frameworks
- Recomendamos también: Guía Zend, Frameworks PHP, Aceleradores PHP
- Agregar al FAQ: PHP: Instrucciones para agregar una pregunta al FAQ de PHP
- Para preguntas sobre PHP: Foro de Php
