Tema: FAQ's de PHP
Ver Mensaje Individual
  #156 (permalink)  
Antiguo 27/02/2006, 00:11
Avatar de turco_7
turco_7
 
Fecha de Ingreso: diciembre-2003
Ubicación: Córdoba, Argentina
Mensajes: 1.044
Antigüedad: 20 años, 3 meses
Puntos: 19
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(000$mess1$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>&nbsp;</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(000$mess1$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(000$mess1$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>&nbsp;</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
__________________
Mi Blog http://turco7.blogspot.com
Usuario Linux : 404289
Mi última página: http://www.digitalservicecba.com.ar - Reparacion de camaras digitales!

Última edición por turco_7; 24/04/2006 a las 12:30