Ver Mensaje Individual
  #6 (permalink)  
Antiguo 24/02/2011, 19:41
ocp001a
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. ?>