Foros del Web » Programando para Internet » PHP »

Problema de rango de fechas en calendario

Estas en el tema de Problema de rango de fechas en calendario en el foro de PHP en Foros del Web. Hola buenas, en el siguiente código de un calendario de disponibilidad me marca los días que no está disponible un producto. Me sale correctamente, salvo ...
  #1 (permalink)  
Antiguo 14/07/2012, 04:45
 
Fecha de Ingreso: diciembre-2009
Mensajes: 125
Antigüedad: 14 años, 3 meses
Puntos: 7
Problema de rango de fechas en calendario

Hola buenas, en el siguiente código de un calendario de disponibilidad me marca los días que no está disponible un producto. Me sale correctamente, salvo cuando el rango de fechas ocupa dos meses, es decir, la fecha de inicio está en un mes y la de salida está en el mes siguiente.

Cuando el rango de fechas está en el mismo mes, no hay problema y me los marca bien..

Espero que alguien pueda aportarme un poco de luz..

Muchas gracias de antemano .



Código PHP:
// Nombre de los meses
    
$nombMes[1] = "Enero";
    
$nombMes[2] = "Febrero";
    
$nombMes[3] = "Marzo";
    
$nombMes[4] = "Abril";
    
$nombMes[5] = "Mayo";
    
$nombMes[6] = "Junio";
    
$nombMes[7] = "Julio";
    
$nombMes[8] = "Agosto";
    
$nombMes[9] = "Septiembre";
    
$nombMes[10] = "Octubre";
    
$nombMes[11] = "Noviembre";
    
$nombMes[12] = "Diciembre";
    
    
    
// Nombres de los dias
    
$diaSemana[0] = "Lun";
    
$diaSemana[1] = "Mar";
    
$diaSemana[2] = "Mie";
    
$diaSemana[3] = "Jue";
    
$diaSemana[4] = "Vie";
    
$diaSemana[5] = "Sab";
    
$diaSemana[6] = "Dom";
    
    
$arrayDias $diaSemana;    // Array con los dias de la semana
    
$meses $nombMes;        // Array con los nombres de los meses
    
// Obtencion del dia actual
    
if (!$dia)    
    {
        
$day=date('d');
    }    
    
// Obtencion del mes actual    
  
if (!$mes)    
    {
        
$mes date('m');
    }

// Optencion del año actual

    
if (!$any)    
    {
        
$any date('Y');
    }

    if (
$mes == 12)    // Comprobacion del final del año
    
{
        
$mes 1;
        
$any $any 1;            
    }

    
 echo(
"<table width=100% height=100%><tr height=100%>");
 
 for (
$cont 0$cont 6$cont++)
 {
    
$numDiasMes date(tmktime(000$mes1$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;  
                    
$id=$_GET['idproducto'];
                    
                    
mysql_select_db($database_base$conection);
                    
$query "SELECT disponibilidadInicio, disponibilidadSalida FROM tb_disponibilidad WHERE tb_disponibilidad.idproducto = $id";                              // Control de dia marcado
                    
$rs mysql_query($query$conection);    // 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("Y/m/d"strtotime($array['disponibilidadInicio']));    // Fecha de entrada
                            
$sale date("Y/m/d"strtotime($array['disponibilidadSalida']));        // 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

                            
$anyEntra $fEntra[0];    // Dia de la entrada
                            
$mesEntra $fEntra[1];    // Mes de la entrada
                            
$diaEntra $fEntra[2];    // Año de la entrada

                            
$anySale $fSalida[0];    // Dia de la salida
                            
$mesSale $fSalida[1];    // Mes de la salida
                            
$diaSale $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>
    "
); 

Etiquetas: calendario, mysql, rango
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 03:26.