Hola, aquí te envío la respuesta. A mi me ha funcionado perfectamente. Compárate el código con WinMerge o cualquier otro programa y verás que son unos pocos cambios.
Código PHP:
Ver original<?php
$ano = isset($_GET['ano']) ?
$_GET['ano'] : date("Y",time());//recibe parametros de año $mes = isset($_GET['mes']) ?
$_GET['mes'] : date("n",time());//recibe parametros de mes $meses = array(//define nombres de los meses 1=>"Enero",
2=>"Febrero",
3=>"Marzo",
4=>"Abril",
5=>"Mayo",
6=>"Junio",
7=>"Julio",
8=>"Agosto",
9=>"Septiembre",
10=>"Octubre",
11=>"Noviembre",
12=>"Diciembre"
);
$dias = array(//define las iniciales de los dias "L",
"M",
"M",
"J",
"V",
"S",
"D"
);
$dias_x_mes = cal_days_in_month(CAL_GREGORIAN
, $mes, $ano);//obtener el numero de dias del mes $inicio_mes_dia = jddayofweek (cal_to_jd(CAL_GREGORIAN
, $mes, 1, $ano));//obtener el dia que inicia el mes $inicio_mes_dia = ($inicio_mes_dia==0) ? 6 : $inicio_mes_dia-1;
//se definen los parametros para navegar en los meses anterior y siguiente
$ant['mes'] = ($mes == 1) ? 12 : ($mes-1);
$ant['ano'] = ($mes == 1) ? ($ano-1) : $ano;
$sig['mes'] = ($mes == 12) ? 1 : ($mes+1);
$sig['ano'] = ($mes == 12) ? ($ano+1) : $ano;
?>
<html>
<head>
<title>Calendario</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style>
body{
font-family: Helvetica, Arial, Verdana, Sans-serif;
font-size:12px;
}
.titulocal{
width:210px;
text-align:center;
color:DimGray;
padding:5px 0px 5px 0px;
}
.titulocal a{
text-decoration:none;
color: DimGray;
}
.tablacal{
width:210px;
padding:0;
border-collapse: collapse;
border:1px solid LightGrey;
font-size:12px;
}
.tablacal th{
width:30px;
background-color:LightGrey;
border-collapse: collapse;
}
.tablacal td{
color:Black;
text-align:center;
}
</style>
</head>
<body>
<div class='titulocal'><!--navegacion anterior y siguiente -->
<a href='<?php echo $_SERVER['PHP_SELF'] ?>?ano=<?php echo $ant['ano'] ?>&mes=<?php echo $ant['mes'] ?>' id='anterior'><</a>
<?php echo $meses[$mes]." ".$ano?>
<a href='<?php echo $_SERVER['PHP_SELF'] ?>?ano=<?php echo $sig['ano'] ?>&mes=<?php echo $sig['mes'] ?>' id='siguiente'>></a>
</div>
<table class='tablacal'><!--inicio de la tabla del calendario-->
<tr>
<?php
for ($dias_semana=0; $dias_semana<count($dias); $dias_semana++){//encabezados con los nombres de los dias ?>
<th class='nombredias'><?php echo $dias[$dias_semana] ?></th>
<?php
}
?>
<tr>
<?php
for($dia_mes=1; $dia_mes<=$dias_x_mes; $dia_mes++){
?>
<tr>
<?php
}
if($dia_mes == 1){
for($dias_antes=0; $dias_antes<$inicio_mes_dia; $dias_antes++){//espacios en blanco que son los dias finales del mes anterior
?>
<td class='dia'> </td>
<?php
}
}
$dia = ($dia_mes<10) ? "0".$dia_mes : $dia_mes;
$mesactual = ($mes<10) ? "0".$mes : $mes;
//se muestran cada uno de los dias
?>
<td class='dia'><?php echo $dia_mes ?></td>
<?php
if($dia_mes == $dias_x_mes){
$dias_fin = ($dias_fin==0) ? $dias_fin : 7 - $dias_fin;
for($dias_despues=0; $dias_despues<$dias_fin; $dias_despues++){//espacios en blanco que son los primeros dias del mes siguiente
?>
<td class='dia'> </td>
<?php
}
}
if(jddayofweek (cal_to_jd(CAL_GREGORIAN
, $mes, $dia_mes, $ano)) == 0 || $dia_mes==$dias_x_mes){//fin del renglon al final de la semana o del mes ?>
</tr>
<?php
}
}
?>
</table><!--fin de la tabla del calendario-->
<body>
</html>
Saludos.