Inicio arrow Trucos y tutoriales arrow Tutoriales PHP y APACHE arrow ¿Cómo creo un calendario de con días y meses donde los vínculos solo lleguen hasta el dia, mes y año
¿Cómo creo un calendario de con días y meses donde los vínculos solo lleguen hasta el dia, mes y año PDF Imprimir E-Mail

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);

 

Comentarios
Añadir nuevoBuscar
¡Sólo los usuarios registrados pueden escribir comentarios!

Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved.

 
< Anterior   Siguiente >
 
 

Encuesta

¿ Que opinas de nuestro nuevo diseño Web ?
 

Estan en Linea

Hay 1 invitado en línea