Foros del Web » Programando para Internet » PHP »

Problema con calendario

Estas en el tema de Problema con calendario en el foro de PHP en Foros del Web. Hola a todos!!! Tengo un problema con un calendario de disponibilidad que estoy trasteando para un web. Tiene que marcar en rojo los días para ...
  #1 (permalink)  
Antiguo 14/08/2008, 10:49
 
Fecha de Ingreso: agosto-2008
Mensajes: 1
Antigüedad: 15 años, 8 meses
Puntos: 0
Problema con calendario

Hola a todos!!!

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(tmktime(000$mes$dia$any));    // Numero de dias que tiene el mes

        
$diaEmpiezaMes date(wmktime(000$mes0$any));    // Dia de la semana que empieza el mes (lunes = 0)

        
$diaTerminaMes date(wmktime(000$mes$numDiasMes$any));    // Dia de la semana que acaba el mes (lunes = 0)

        
$diaTerminaMesOffSet $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>
    "
);

Muchas gracias

Última edición por Tanier; 15/08/2008 a las 03:46
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:43.