TEMA: Uso de las funciones mktime() y date()
PREGUNTA: ¿ Como puedo hacer un calendario ?
RESPUESTA: Con las funciones mktime() y date() alcanza!!!
La mayoría del script funciona en base a la funcione
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 dia de la semana en letras...
$fecha = date("d",mktime(0,0,0,$mess,$diaa,$anio)); #retorna el dia del mes en 01/31
$dia_semana = date("w",mktime(0,0,0,$mess,$diaa,$anio)); #retorna el dia de la semana en numero
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 asi ..
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 proximo (next) esto me sirve para mostrar las flechitas << >> que serviria 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 funcion mktime() para que me devuelva el dia 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 asi ... es para saber mas 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 numeros .. 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 alamceno el numero 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 dia 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 cuantos 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++;
?>
Espero haberme explicado bien ... cualquier duda .. ya saben ...
Recuerden que todo es en base a las funciones
mktime y
date