Foros del Web » Programando para Internet » PHP »

ayuda calendario

Estas en el tema de ayuda calendario en el foro de PHP en Foros del Web. buenas a todos estoy bloqueado con un calendario anual, el problema es que quiero que el primer dia sale en su celda ejemplo: el mes ...
  #1 (permalink)  
Antiguo 24/02/2011, 17:41
 
Fecha de Ingreso: noviembre-2009
Mensajes: 535
Antigüedad: 14 años, 5 meses
Puntos: 25
ayuda calendario

buenas a todos
estoy bloqueado con un calendario anual, el problema es que quiero que el primer dia sale en su celda ejemplo: el mes de enero del 2011 el primer dia impienza el sabado osea que las primeras celdas de la semana se quedan vacias.
aqui esta mi codigo

Código PHP:
Ver original
  1. <?php
  2. require('../db.php');
  3. $id_hotel = '1';
  4.  
  5.     $table = 'anio'.$id_hotel.'_2011';
  6.     $query = "SELECT * FROM ".$table." WHERE  ".$table.".id_hotel = '".$id_hotel."' GROUP BY fecha";
  7.     $result = mysql_query($query, $GLOBALS['DB']) or die(mysql_error());
  8.     if($result)
  9.    
  10.     echo '<table border="1" style="text-align: right;">';
  11.     {
  12.         $nombre_dias = array(1 => 'LUN', 'MAR', 'MIE', 'JUV', 'VIE', 'SAB', 'DOM');
  13.         for($i = 1; $i <=7; $i++){
  14.         echo '<th>'.$nombre_dias[$i].'</th>';
  15.         }
  16.         while($row = mysql_fetch_array($result)){
  17.            
  18.             $fecha = $row['fecha'];
  19.             $f = strtotime($fecha);
  20.             $dm = date('j', $f); // dias del mes
  21.             $m = date('m', $f); // meses
  22.             $s = date('D', $f); // diade la semana
  23.             $y = date('Y', $f); // year
  24.             $d = date('d', $f); // dias
  25.             $t = date('t', $f); // dias del mes
  26.             $n = date('N', $f);
  27.             $ns = date('W', $f);
  28.             $full_date = $y.'-'.$m.'-'.$d;
  29.             $finS = 'SUN';
  30.             $diase = $nombre_dias[$n];
  31.             $fiestd = $y.'-'.$m.'-1';
  32.             $class = '';
  33.            
  34.             if($row['pro_1'] > 1){ $class .= 'background-color:#09C;';}else{ $class .= 'background-color:#FFF;';}
  35.             if($nombre_dias[$n] == $nombre_dias[7]){ $class .= 'background-color:#e5204a;';}
  36.             //if(!$fiestd == $nombre_dias[1]){echo '<td>&nbsp;</td>';}
  37.             //if($dm == $nombre_dias[$n] ){ echo '<td>&nbsp;</td>';}
  38.             if($dm <= 1 || $nombre_dias[$n] == $nombre_dias[7]){echo '</tr><tr>';}
  39.             for($i = date('wday', $f); $i<= $s; $i+= $dm){
  40.                 if($dm){echo '
  41.                 <td align="right" style="'.$class.'">'.$dm.'</td>
  42.                 ';}elseif(!$n == $nombre_dias[$n]){echo '<td>&nbsp;</td>';}}
  43.            
  44.                
  45.            
  46.            
  47.         }
  48.     }
  49.  
  50.    
  51.     ?>
  #2 (permalink)  
Antiguo 24/02/2011, 17:51
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: ayuda calendario

Tienes que saber qué día de la semana fue el primero del mes, eso se puede obtener con date("w",$fecha) o date("N",$fecha), toma el que te convenga.
Así puedes dejar en las primer fila un td con el colspan con el valor obtenido previamente.
  #3 (permalink)  
Antiguo 24/02/2011, 18:04
 
Fecha de Ingreso: noviembre-2009
Mensajes: 535
Antigüedad: 14 años, 5 meses
Puntos: 25
Respuesta: ayuda calendario

Cita:
Iniciado por ocp001a Ver Mensaje
Tienes que saber qué día de la semana fue el primero del mes, eso se puede obtener con date("w",$fecha) o date("N",$fecha), toma el que te convenga.
Así puedes dejar en las primer fila un td con el colspan con el valor obtenido previamente.

se ves en la imagen veras que los dias no se situan en sus celdas. lo siento no se como explicarlo me cuesta
  #4 (permalink)  
Antiguo 24/02/2011, 19:24
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: ayuda calendario

Si, lo entiendo, pero tu no haz comprendido mi explicación.
Si el primero de mes cae en martes, por ejemplo, con date("w",$fecha1demes); te dirá que es 2, así antes poner el td del dia 1 colocas un td vacio con colspan =2 (el que te haya dado el date) tengo un ejemplo ya hecho que se recarga con xajax, por si te interesa mirarlo lo pongo aquí.
  #5 (permalink)  
Antiguo 24/02/2011, 19:35
 
Fecha de Ingreso: noviembre-2009
Mensajes: 535
Antigüedad: 14 años, 5 meses
Puntos: 25
Respuesta: ayuda calendario

gracias por la respuesta, se he entendido pero no se como ponerlo, la fecha se extrae desde basededatos asi que tengo un ppoco de defecultades y limiteciones en el escript, tu podrias modeficar algo para solo derejirme, gracias otra ves por tu tiempo
  #6 (permalink)  
Antiguo 24/02/2011, 19:41
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: ayuda calendario

De la fecha que tomas por BD, puedes calcular lo demás, por ejemplo lo indispensable, cuantos dias tiene el mes, qué dia fue el primero de mes etc. Partiendo la fecha y aplicando diferentes cálculos.

Te paso un calendario que hice hace mucho, ya lo tengo obsoleto pues hice uno mejor en javascript.
Se basa en xajax, pero creo que la lógica básica se entiende.

Código PHP:
Ver original
  1. <?php
  2. function calendario($fecha,$campo,$evento=0){
  3.     global $skin;
  4.     if($fecha=="")
  5.         $fecha=date("d/m/Y");
  6.     $fechadiv = explode("/", $fecha);
  7.     $fechadiv[0]+=0;
  8.     $fechadiv[1]+=0;
  9.     $fechadiv[2]+=0;
  10.     $ano_ant=$fechadiv[2]-1;
  11.     $ano_sig=$fechadiv[2]+1;
  12.     $ano_ant="$fechadiv[0]/$fechadiv[1]/$ano_ant";
  13.     $ano_sig="$fechadiv[0]/$fechadiv[1]/$ano_sig";
  14.     $meses[1]="Enero";$meses[2]="Febrero";$meses[3]="Marzo";
  15.     $meses[4]="Abril";$meses[5]="Mayo";$meses[6]="Junio";
  16.     $meses[7]="Julio";$meses[8]="Agosto";$meses[9]="Septiembre";
  17.     $meses[10]="Octubre";$meses[11]="Noviembre";$meses[12]="Diciembre";*/
  18.     // Primer dia del mes
  19.     $primer_dia_mes = mktime( 0,0 ,0 , $fechadiv[1], 1, $fechadiv[2]);
  20.     $primer_dia_semana = Date("w",$primer_dia_mes);
  21.     $pdms=mktime(0,0,0,$fechadiv[1]+1,0,$fechadiv[2]);
  22.     $ultimo_dia_mes=Date("d",$pdms);//tomamos el numero del ultimo dia del mes
  23.     //$dia_de_hoy = $fechadiv[0];
  24.     $dia_de_hoy = date("d/m/Y");
  25.     $mes_actual = $fechadiv[1];
  26.     $ano_actual = $fechadiv[2];
  27.     if($fechadiv[1]>1 and $fechadiv[1]<12){//si el mes es mayor a enero y menor a diciembre
  28.         $fecha_ant=$fechadiv[1]-1;
  29.         $fecha_ant="$fechadiv[0]/$fecha_ant/$fechadiv[2]";
  30.         $fecha_sig=$fechadiv[1]+1;
  31.         $fecha_sig="$fechadiv[0]/$fecha_sig/$fechadiv[2]";
  32.     }
  33.     if($fechadiv[1]==1){//si el mes es enero
  34.         $fecha_ant=$fechadiv[2]-1;
  35.         $fecha_ant="$fechadiv[0]/12/$fecha_ant";
  36.         $fecha_sig=$fechadiv[1]+1;
  37.         $fecha_sig="$fechadiv[0]/$fecha_sig/$fechadiv[2]";
  38.     }
  39.     if($fechadiv[1]==12){//si el mes es diciembre
  40.         $fecha_ant=$fechadiv[1]-1;
  41.         $fecha_ant="$fechadiv[0]/$fecha_ant/$fechadiv[2]";
  42.         $fecha_sig=$fechadiv[2]+1;
  43.         $fecha_sig="$fechadiv[0]/1/$fecha_sig";
  44.     }
  45.     $mex=$meses[$mes_actual];//tomamos el nombre del mes actual
  46.     //echo "---$mex $mes_actual---";
  47.         if(!$evento)
  48.             $calen.="   <a onclick=\"_$('$campo').focus();dia('$campo','$fecha',0);\">X cerrar</a><hr/>";
  49.     $calen.="
  50.         <div style=\"float:left;\">
  51.             <a onclick=\"xajax_calendario('$ano_ant','$campo','$evento');\">
  52.                 <img src=\"$skin/img/left.gif\" style=\"width:10px;\">
  53.             </a><b>$ano_actual</b>
  54.             <a onclick=\"xajax_calendario('$ano_sig','$campo','$evento');\">
  55.                 <img src=\"$skin/img/right.gif\" style=\"width:10px;\">
  56.             </a>
  57.         </div>
  58.         <div style=\"float:right;\">
  59.             <a onclick=\"xajax_calendario('$fecha_ant','$campo','$evento');\">
  60.                 <img src=\"$skin/img/left.gif\" style=\"width:10px;\">
  61.             </a><b>$mex</b>
  62.             <a onclick=\"xajax_calendario('$fecha_sig','$campo','$evento');\">
  63.                 <img src=\"$skin/img/right.gif\" style=\"width:10px;\">
  64.             </a>
  65.         </div>
  66.         <br/>";
  67.     $calen.="
  68.     <center>
  69.     <table  class=\"tabla_lista\" style=\"width:180px; font-size:7pt;text-align:center;\">
  70.         <tr style=\"background-color:#ffcc00\"><td>D</td><td>L</td><td>M</td><td>M</td><td>J</td><td>V</td><td>S</td><td>#S</td></tr>";
  71.     // Dias nulos anteriores al primer dia de la semana
  72.     $calen.="<tr>
  73.         <td colspan=\"$primer_dia_semana\"></td>";//Llenado de los dias nulos
  74.     $dia_de_semana = $primer_dia_semana + 1;
  75.      // Construye el dia actual
  76.     for ($dia = 1 ; $dia <= $ultimo_dia_mes ; $dia++){//recorremos los dias del mes
  77.         $fechaj=mktime(0,0,0,$fechadiv[1],$dia,$ano_actual);
  78.         $fechaj=date("d/m/Y",$fechaj);
  79.         if ($dia_de_semana == 1)//si es domingo
  80.             $calen.="<TR>";//comenzamos una nueva fila
  81.         if($fechaj==$dia_de_hoy)//si el dia recorrido es el dia actual
  82.              $cw="#ff0000";
  83.         else//si no ;P
  84.              $cw="#ffff66";
  85.         if(!$evento)
  86.             $calen.="
  87.                 <td  onclick=\"dia('$campo','$fechaj',1)\" bgcolor=\"$cw\" >
  88.                     $dia
  89.                 </td>";
  90.         else
  91.             $calen.="
  92.                 <td bgcolor=\"$cw\" >
  93.                     $dia
  94.                 </td>";
  95.             if ($dia_de_semana == 7){//si el dia de la semana es sabado
  96.                 $dia_de_semana = 0;//volvemos a poner en 0 el dia de la semana
  97.                 $mt=mktime(0,0,0,$fechadiv[1],$dia,$ano_actual);
  98.                 $sx=date("W",$mt)+0;
  99.                 $calen.="<td>$sx</td></TR>";//y cerramos la fila
  100.             }
  101.             $dia_de_semana += 1;//aumentamos el dia de la semana
  102.     }
  103.     if ($dia_de_semana != 1){
  104.         $tmp = 8 - $dia_de_semana;
  105.         $calen.="<TD colspan=$tmp></TD>";
  106.         $mt=mktime(0,0,0,$fechadiv[1],$dia,$ano_actual);
  107.         $sx=date("W",$mt)+0;
  108.         $calen.="<td>$sx</td></TR>";//y cerramos la fila
  109.     }
  110.     $calen.="
  111.         </TR>
  112.     </TABLE>";
  113.     $ponmes = new xajaxResponse();
  114.     $ponmes->assign("month_$campo","innerHTML","$calen");
  115.     return $ponmes;
  116. }
  117. ?>
  #7 (permalink)  
Antiguo 24/02/2011, 19:42
 
Fecha de Ingreso: noviembre-2009
Mensajes: 535
Antigüedad: 14 años, 5 meses
Puntos: 25
Respuesta: ayuda calendario

muchas geacias por tu ayuda voy a probarlo

Etiquetas: calendario
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 08:04.