Hola
Este calendario te muestra el mes actual y dos meses posteriores. Puedes avanzar o retroceder en los meses. Pruébalo a ver si logras adaptarlo a lo de las efemérides
Código PHP:
Ver original<html>
<head>
<title>CALENDARIO</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
.calFondoCalendario {background-color:#EEEEEE;border: 1px solid #C9C9C9;border-width: 1px 1px 1px 1px;}
#calFondoMes {background-color:#C9C9C9;font-family:Arial, Helvetica, sans-serif; font-size:11px;font-weight:bold;text-align:center;}
.calFondoDias, .calFondoSemanas, .calFondoNumeroSemanas {background-color:#C9C9C9;font-family:Arial, Helvetica, sans-serif; font-size:9px; font-weight:900; }
.calDias, .calFinSemana {font-family:Arial, Helvetica, sans-serif; font-size:11px; font-weight:700;}
.calDias {color:#333333;}
.calFinSemana {color:#FF0000;}
.calDiaVacio {background-color:#FFFFFF;color:#C9C9C9;font-family:Arial, Helvetica, sans-serif; font-size:11px; font-weight:700;text-align:center;}
#paginador {background-color:#EEEEEE;height:30px;padding-top:7px;}
#paginador a:link, #paginador a:visited{background-color:#A4A4A4;color:#FFFFFF;font-family:Arial, Helvetica, sans-serif; font-size:9px; font-weight:900;text-decoration:none;padding:3px;border: 1px solid #C9C9C9;border-width: 1px 1px 1px 1px;}
#paginador a:hover, #paginador a:active{background-color:#EEEEEE;color:#333333;font-family:Arial, Helvetica, sans-serif; font-size:9px; font-weight:900;text-decoration:none;padding:3pxborder: 1px solid #C9C9C9;border-width: 1px 1px 1px 1px;}
</style>
</head>
<body bgcolor="#FFFFFF">
<?php
$URL = "OtraPagina.php";
// Si viene vacía o no es numerica
} else {
$Mes = $_GET["mes"];
}
} else {
$ElAnyo = $_GET["anyo"];
}
$FechaInicio = date("01/m/Y"); $FechaInicio = mktime(0,0,0,$mes,$dia,$anyo); $FechaActual = date("01/".$Mes."/".$ElAnyo); $FechaActual = mktime(0,0,0,$mes,$dia,$anyo); $FechaLimite = date("01/m/Y"); $FechaLimite = mktime(0,0,0,$mes+4,$dia,$anyo); $FechaActual2 = date($Mes."/01/".$ElAnyo); ?>
<div style="background-color:#EEEEEE;padding-top:20px;padding-bottom:20px;border: 1px solid #C9C9C9;border-width: 1px 1px 1px 1px;">
<!-- Empezamos a montar el Calendario -->
<div id="ContenedorCalendario">
<table border="0" cellspacing="0px" cellpadding="0px" width="85%" align="center">
<tr>
<?php
if ($FechaActual > $FechaLimite) { // Ha progresado 6 meses (empezó 01/11/2009 termina 01/05/2010)
?>
<td id="calFondoMes">No puede hacer una reserva con mas de 6 meses de antelación</td></tr></table>
<div id="paginador" align="center">
<a href="./calendario.php?mes=
<?php echo date("m")?>&anyo=
<?php echo date("Y")?>">Atrás</a>
</div>
<?php
} else if ($FechaActual < $FechaInicio) { // Se ha manipulado la query con una fecha menor a la de inicio (empezó 01/11/2009 quiere imprimir 01/10/2009)
?>
<td id="calFondoMes">No puede hacer una reserva con una fecha ya pasada</td></tr></table>
<div id="paginador" align="center">
<a href="./calendario.php?mes=
<?php echo date("m")?>&anyo=
<?php echo date("Y")?>">Atrás</a>
</div>
<?php
} else {
$div_fechaactual = explode ( "/", $FechaActual2); for ($i=0; $i<=2; $i++) {
$mesAnyo = mktime ( 0, 0, 0, date("$div_fechaactual[0]")+$i, date("$div_fechaactual[1]"), date("$div_fechaactual[2]")); $ElMes = date("m", $mesAnyo); $ElAnyo = date("Y", $mesAnyo); ?>
<td>
<table border="0" cellspacing="1px" cellpadding="3px" width="200px" align="center" class="calFondoCalendario">
<tr align="center">
<td colspan="8">
<div id="calFondoMes">
<?php echo Nombre_Mes($ElMes)?>, <?php echo $ElAnyo?>
</div>
</td>
</tr>
<?php echo DiasSemana(); // Sub días de la semana y número de la semana
$PrimerDiaMes = NumeroPrimerDiaMes(1,$ElMes,$ElAnyo); // Número primer día mes
$Semana = strftime("%W", strtotime($ElMes."/1/".$ElAnyo)); // Número de semana del mes actual $nSemanas31 = strftime("%W", strtotime("12/31/".$ElAnyo)); // Número de la última semanas del año $nSemanas01 = strftime("%W", strtotime("1/1/".$ElAnyo)); // Número de semana de la primera semana del año siguiente $DiaActual = 1;
$DiasMesSiguiente = 0;
for ($Fila = 0; $Fila<=5; $Fila++) {
?>
<tr height="20px">
<?php
// ============== Número de la Semana ==============
if($Fila == 0){
if($Semana == $nSemanas01) { // La última semana del año anterior comprende algún día del siguiente año
$Semana = $nSemanas31;
?>
<td class="calFondoNumeroSemanas"><?php echo $Semana?></td>
<?php
} else {
?>
<td class="calFondoNumeroSemanas"><?php echo $Semana?></td>
<?php
}
} else {
if($Semana >= $nSemanas31) { // Primera semana del año
$Semana = 1;
} else {
$Semana +=1;
}
?>
<td class="calFondoNumeroSemanas">
<?php if (strlen($Semana) == 1) {echo "0".$Semana;} else { echo $Semana;}?></td>
<?php
}
// ============== Fin Número de la Semana ==============
for ($Columna = 0; $Columna <=6; $Columna++) {
if (($Fila == 0) && ($Columna < $PrimerDiaMes)) { // No hay día
$UltimoDiaMesAnterior = UltimoDia(($ElMes-1),$ElAnyo);
$DiasMesAnterior = (($UltimoDiaMesAnterior - ($PrimerDiaMes-1)) + $Columna);
?>
<td class="calDiaVacio"><?php echo $DiasMesAnterior?></td>
<?php
} else if ($DiaActual > UltimoDia($ElMes, $ElAnyo)) { // No hay día
$DiasMesSiguiente += 1;
?>
<td class="calDiaVacio"><?php echo $DiasMesSiguiente?></td>
<?
}else {
if (($Columna == 5) || ($Columna == 6)) { // es fin de semana
?>
<td class="calFinSemana">
<?php
} else {
?>
<td class="calDias">
<?php
}
?>
<p id="calDias_<?php echo $DiaActual?>/<?php echo $ElMes?>/<?php echo $ElAnyo?>"><?php echo $DiaActual?></p>
</td>
<div id="Dia_<?php echo $DiaActual?>/<?php echo $ElMes?>/<?php echo $ElAnyo?>"></div>
<?php
$DiaActual += 1;
}
} //Columna
?>
</tr>
<?php
} // Fila
?>
</table></td>
<?php
} // i
?>
</tr>
</table>
</div>
<!-- Fin Calendario -->
<!-- Paginador -->
<div id="paginador" align="center">
<?php
$sumames_fechaActual = explode ( "/", $FechaActual2); $masmeses = mktime (0, 0, 0, date("$sumames_fechaActual[0]")+1, 1, date("$sumames_fechaActual[2]")); $restames_fechaActual = explode ( "/", $FechaActual2); $menosmeses = mktime (0, 0, 0, date("$restames_fechaActual[0]")-1, 1, date("$restames_fechaActual[2]")); ?>
<a href="./calendario.php?mes=
<?php echo date("m", $menosmeses)?>&anyo=
<?php echo date("Y", $menosmeses)?>">Anterior1</a>
<a href="./calendario.php?mes=
<?php echo date("m", $masmeses)?>&anyo=
<?php echo date("Y", $masmeses)?>">Siguiente1</a>
</div>
<?php
}
?>
</div>
<!-- Fin Paginador -->
</body>
</html>
<?php
//====================== Funciones ===========================
function Nombre_Mes($ElMes) {
switch ($ElMes) {
case 1:
echo "Enero";
break;
case 2:
echo "Febrero";
break;
case 3:
echo "Marzo";
break;
case 4:
echo "Abril";
break;
case 5:
echo "Mayo";
break;
case 6:
echo "Junio";
break;
case 7:
echo "Julio";
break;
case 8:
echo "Agosto";
break;
case 9:
echo "Septiembre";
break;
case 10:
echo "Octubre";
break;
case 11:
echo "Noviembre";
break;
case 12:
echo "Diciembre";
break;
default;
echo "ERROR!";
}
}
function UltimoDia($ElMes, $ElAnyo) {
switch ($ElMes) {
case 01:
case 03:
case 05:
case 07:
case 08:
case 10:
case 12:
$FinMes = 31;
return $FinMes;
break;
case 04:
case 06:
case 09:
case 11:
$FinMes = 30;
return $FinMes;
break;
case 02:
If (checkdate($ElAnyo,$ElMes,29)) { $FinMes = 29; return $FinMes; }else{ $FinMes = 28; return $FinMes;} break;
default;
$FinMes = 31;
return $FinMes;
}
}
function NumeroPrimerDiaMes($dia,$mes,$anyo){
$numerodia = date('w', mktime(0,0,0,$mes,$dia,$anyo)); if ($numerodia == 0)
$numerodia = 6;
else
$numerodia--;
return $numerodia;
}
function DiasSemana(){?>
<tr align="center">
<td rows="6"><div class="calFondoSemanas">Sem</div></td>
<td><div class="calFondoDias">Lun</div></td>
<td><div class="calFondoDias">Mar</div></td>
<td><div class="calFondoDias">Mié</div></td>
<td><div class="calFondoDias">Jue</div></td>
<td><div class="calFondoDias">Vie</div></td>
<td><div class="calFondoDias">Sáb</div></td>
<td><div class="calFondoDias">Dom</div></td>
</tr>
<?php
}
?>
Suerte