Tengo un problema con un calendario de disponibilidad que estoy trasteando para un web.
Tiene que marcar en rojo los días para los que un local está ocupado y el resto los marca en otro color distinto. El problema es que los días los marca bien, salvo que cuando se tiene que marcar fechas que están entre dos meses, no lo hace.
Ejemplo: la fecha de inicio de la ocupación es el 29 de septiembre y la de finalización el 5 de octubre (en esto falla y no los marca)
Me gustaría que le echaran un vistazo al código a ver si varios ojos ven más que dos en los fallos:
Código PHP:
// Funcion que muestra el calendario de disponibilidad de una propiedad
function MostrarCalendario($id)
{
$arrayDias = $diaSemana; // Array con los dias de la semana
$meses = $nombMes; // Array con los nombres de los meses
$fecha = getdate(); // Obtencion de la fecha actual
$dia = $fecha['mday'];
$mes = $fecha['mon'];
$any = $fecha['year'];
$conexion = mysql_connect ($host_DB, $user_DB, $pass_DB);
// Consulta que obtendra las caracteristicas de la propiedad
$query = "select fEntrada, fSalida
from reserva
where idProp = $id";
$baseDatos = mysql_select_db($name_DB, $conexion); // Seleccion de la base de datos
echo("
<table width=100% height=100%>
<tr height=100%>
");
for ($cont = 0; $cont < 3; $cont++)
{
$numDiasMes = date(t, mktime(0, 0, 0, $mes, $dia, $any)); // Numero de dias que tiene el mes
$diaEmpiezaMes = date(w, mktime(0, 0, 0, $mes, 0, $any)); // Dia de la semana que empieza el mes (lunes = 0)
$diaTerminaMes = date(w, mktime(0, 0, 0, $mes, $numDiasMes, $any)); // Dia de la semana que acaba el mes (lunes = 0)
$diaTerminaMesOffSet = 6 - $diaTerminaMes; // Celdas libres tras el ultimo dia
$numCeldas = $numDiasMes + $diaEmpiezaMes + $diaTerminaMesOffSet; // Numero de celdas para colocar los dias
if ($mes == 12)
{
$mes = 1;
}
echo
("
<td>
<table style=\"font-family:arial;font-size:14px\" cellpadding=1 cellspacing=1 align=center border=1>
<tr>
<td colspan=10>
<table align=center>
<tr>
<td>
<b>".$meses[$mes]." - $any</b>
</td>
</tr>
</table>
</td>
</tr>
<tr>
");
foreach ($arrayDias AS $key) // Marcacion de los dias de la semana
{
echo
("
<td bgcolor=#ccccff>
<b>$key</b>
</td>
");
}
echo
("
</tr>
");
for ($contDias = 1; $contDias <= $numCeldas; $contDias++) // Escritura de los dias
{
if(!$diasSemana || ($diasSemana > 6)) // Deteccion de final de la semana
{
$diasSemana = 0;
}
if ($diasSemana == 0) // Creacion primera fila de dias
{
echo
("
<tr>
");
}
if (!$numDia)
{
$numDia = 1;
}
if (($contDias > $diaEmpiezaMes) && ($numDia <= $numDiasMes))
{
if (($numDia == date(d)) && ($mes == date(m)) && ($any == date(Y))) // Marcacion del dia actual
{
echo
("
<td bgcolor=\"#ffcc99\">
$numDia
</td>
");
}
else
{
$marcado = false; // Control de dia marcado
$rs = mysql_query ($query, $conexion); // Ejecucion de la consulta
$colums = mysql_num_rows($rs); // Numero de filas que se obtienen
if ($colums > 0)
{
for ($i = 0; ($i < $colums) && !$marcado; $i++)
{
$array = mysql_fetch_array($rs); // Obtencion de resultados
$entra = date("d-m-Y", strtotime($array['fEntrada'])); // Fecha de entrada
$sale = date("d-m-Y", strtotime($array['fSalida'])); // Fecha de salida
$fEntra = explode("-", $entra); // Extraccion de los datos de la fecha de entrada
$fSalida = explode("-", $sale); // Extraccion de los datos de la fecha de salida
$diaEntra = $fEntra[0]; // Dia de la entrada
$mesEntra = $fEntra[1]; // Mes de la entrada
$anyEntra = $fEntra[2]; // Año de la entrada
$diaSale = $fSalida[0]; // Dia de la salida
$mesSale = $fSalida[1]; // Mes de la salida
$anySale = $fSalida[2]; // Año de la salida
// Marcacion de la fecha reservada
if (($any >= $anyEntra) && ($any <= $anySale)) // Comparacion del año
{
if (($mes >= $mesEntra) && ($mes <= $mesSale)) // Comparacion del mes
{
if (($numDia >= $diaEntra) && ($numDia <= $diaSale)) // Comparacion del dia
{
$marcado = true;
echo
("
<td bgcolor=\"#FF0000\">
$numDia
</td>
");
}
}
}
}
}
if (!$marcado) // Marcacion de dias sin reserva
{
echo
("
<td bgcolor=\"#EEEEEE\">
$numDia
</td>
");
}
}
$numDia++;
}
else // Celdas vacias
{
echo
("
<td></td>
");
}
if ($diasSemana == 6) // Deteccion del final de la semana
{
echo
("
</tr>
");
}
$diasSemana++;
}
echo
("
</table>
</td>
");
$mes++; // Aumento del numero de mes
$diasSemana = NULL; // Reinicio del contador de dias de la semana
$numDia = NULL; // Reinicio del contador del numero de dia
}
echo
("
</tr>
</table>
");
}