Tema: FAQ's de PHP
Ver Mensaje Individual
  #125 (permalink)  
Antiguo 28/10/2004, 11:43
Avatar de Reynier
Reynier
 
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 22 años
Puntos: 1
Calendario

Tema: Calendarios y Fechas
Pregunta: ¿Cómo creo un calendario de con días y meses donde los vínculos solo lleguen hasta el dia, mes y año actual?
Respuesta: Bueno a lo mejor muchos se han visto en este problema de crear calendario para mantener las cosas y realizar consultas a BDatos obtniendo las mismas por fechas. El calendario Consta de 4 funciones básicas:
Código PHP:
 DiaSemana($dia,$mes,$ano); 
 
NombreMes($mes);
 
ultimoDia($mes,$ano);
 
Calendar($mes,$ano); 
En la función DiaSemana($dia,$mes,$ano) lo que hacemos es devolver el día de la semana numéricamente, o sea, 1,2,3,4,5,6,7 según corresponda.
Código PHP:
function DiaSemana($dia,$mes,$ano){ 
  
$numerodiasemana date('w'mktime(0,0,0,$mes,$dia,$ano)); 
  if(
$numerodiasemana == 0){ $numerodiasemana 6; } else { $numerodiasemana--; } 
  return 
$numerodiasemana

En la función NombreMes($mes) lo que hacemos es darle nombre a los meses ya que la función date() de PHP los devuelve pero en Inglés.
Código PHP:
function NombreMes($mes){ 
  switch (
$mes){ 
   case 
1:  $nombre "Ene";  break; 
   case 
2:  $nombre "Feb";  break; 
   case 
3:  $nombre "Mar";  break; 
   case 
4:  $nombre "Abr";  break; 
   case 
5:  $nombre "May";  break; 
   case 
6:  $nombre "Jun";  break; 
   case 
7:  $nombre "Jul";  break; 
   case 
8:  $nombre "Ago";  break; 
   case 
9:  $nombre "Sep";  break; 
   case 
10$nombre "Oct";  break; 
   case 
11$nombre "Nov";  break; 
   case 
12$nombre "Dic";  break; 
  } 
  return 
$nombre

En la función ultimoDia($mes,$ano) lo que hacemos es calcular el último día que tiene el mes con el cual estamos construyendo el calendario para así construir la tabla con todos los días.
Código PHP:
function ultimoDia($mes,$ano){ 
  
$ultimo_dia=28
  while (
checkdate($mes,$ultimo_dia 1,$ano)){ $ultimo_dia++; } 
  return 
$ultimo_dia

Código PHP:
# Calendario de meses 
function Calendar($mes,$ano){ 
  
$nombremes NombreMes($mes); 
  
$mes_anterior $mes 1
  
$ano_anterior $ano
  if (
$mes_anterior == 0){ 
   
$ano_anterior--; 
   
$mes_anterior 12
  } 
  
$mes_siguiente $mes 1
  
$ano_siguiente $ano
  if (
$mes_siguiente==13){ 
   
$ano_siguiente++; 
   
$mes_siguiente=1
  } 
  echo 
"<table width='100'  border='0' cellspacing='0' cellpadding='0' align='center'>"
  echo 
"</table>"
  echo 
"<table width='100'  border='0' cellspacing='0' cellpadding='0' align='center' class='calendar'>"
  echo 
"<tr><td colspan='7' class='normal fontbig bold alterno calendar' align='center'><a href='".basename($_SERVER['PATH_TRANSLATED'])."?mes=".($mes_anterior)."&ano=".($ano_anterior)."&sid=".session_id()."'><< </a> ".$nombremes." ".$ano." <a href='".basename($_SERVER['PATH_TRANSLATED'])."?mes=".($mes_siguiente)."&ano=".($ano_siguiente)."&sid=".session_id()."'>>> </a></td></tr>"
  echo 
"<tr>"
  echo 
"<td align='center' bgcolor='#F0F8FE'>D</td>"
  echo 
"<td align='center' bgcolor='#F0F8FE'>L</td>"
  echo 
"<td align='center' bgcolor='#F0F8FE'>M</td>"
  echo 
"<td align='center' bgcolor='#F0F8FE'>M</td>"
  echo 
"<td align='center' bgcolor='#F0F8FE'>J</td>"
  echo 
"<td align='center' bgcolor='#F0F8FE'>V</td>"
  echo 
"<td align='center' bgcolor='#F0F8FE'>S</td>"
  echo 
"</tr>"
  
$dia_actual 1
  
$numero_dia DiaSemana(1,$mes,$ano); 
  
$ultimo_dia ultimoDia($mes,$ano); 
  
$diaact date("d"); 
  
$mesact date("m"); 
  
$anoact date("Y"); 
  echo 
"<tr>"
  for(
$i=-1;$i<6;$i++){ 
   if((
$dia_actual<=$diaact) && ($mes<=$mesact) && ($ano<=$anoact)){ 
    
$bgcolor "#F0F8FE"
   }elseif((
$dia_actual>$diaact) && ($mes>=$mesact) || ($ano>$anoact)){ 
    
$bgcolor "#D8D8D8"
   }elseif (
$mes>$mesact){ 
    
$bgcolor "#D8D8D8"
   } 
   if((
$dia_actual<=$diaact) && ($mes<=$mesact) && ($ano<=$anoact)){ 
    
$enlace "calendar.php?action=show&dia=".$dia_actual."&mes=".$mes."&ano=".$ano."&sid=".session_id().""
   }else{ 
    
$enlace ""
   } 
   if(
$i $numero_dia){ 
    echo 
"<td class='calendar' bgcolor='#D8D8D8'>&nbsp;</td>"
   }else{ 
    echo 
"<td align='center' bgcolor='".$bgcolor."'><a href=".$enlace."><span class='info' title='Mostrar contenido de ".($dia_actual."-".$mes."-".$ano)."'>".$dia_actual."</span></a></td>"
    
$dia_actual++; 
   } 
  } 
  echo 
"</tr>"
  
$numero_dia 0
  while(
$dia_actual <= $ultimo_dia){ 
   if((
$dia_actual<=$diaact) && ($mes<=$mesact) && ($ano<=$anoact)){ 
    
$bgcolor "#F0F8FE"
   }elseif((
$dia_actual>$diaact) && ($mes>=$mesact) || ($ano>$anoact)){ 
    
$bgcolor "#D8D8D8"
   }elseif (
$mes>$mesact){ 
    
$bgcolor "#D8D8D8"
   } 
   if((
$dia_actual<=$diaact) && ($mes<=$mesact) && ($ano<=$anoact)){ 
    
$enlace "calendar.php?action=show&dia=".$dia_actual."&mes=".$mes."&ano=".$ano."&sid=".session_id().""
   }else{ 
    
$enlace ""
   } 
   if (
$numero_dia == 0
    echo 
"<tr>"
    echo 
"<td align='center' bgcolor='".$bgcolor."'><a href=".$enlace."><span class='info' title='Mostrar contenido de ".($dia_actual."-".$mes."-".$ano)."'>".$dia_actual."</span></a></td>"
    
$dia_actual++; 
    
$numero_dia++; 
    if (
$numero_dia == 7){ 
     
$numero_dia 0
     echo 
"</tr>"
    } 
   } 
  for (
$i=$numero_dia;$i<7;$i++){ 
   echo 
"<td bgcolor='#D8D8D8'>&nbsp;</td>"
  } 
  echo 
"</tr>"
  echo 
"</table>"

Se usa de esta forma. Si la tienes en un archivo externo al tuyo, donde vas a usar la función sería algo como esto:
Código PHP:
 include("calendar-functions.php");
 
$mes = isset($_GET['mes'])?$_GET['mes']:date("m");
 
$ano = isset($_GET['ano'])?$_GET['ano']:date("Y");
 
Calendar($mes,$ano); 
sino simplemente sería esto:
Código PHP:
 $mes = isset($_GET['mes'])?$_GET['mes']:date("m");
 
$ano = isset($_GET['ano'])?$_GET['ano']:date("Y");
 
Calendar($mes,$ano); 
espero les sirva.
Salu2
__________________
Ing. Reynier Pérez Mira

Última edición por Reynier; 29/10/2004 a las 15:27