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'> </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'> </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