Ver Mensaje Individual
  #2 (permalink)  
Antiguo 13/01/2011, 08:09
Avatar de Adler
Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: Extender este calendario

Hola

Este calendario te muestra el mes actual y dos meses posteriores. Puedes avanzar o retroceder en los meses. Pruébalo a ver si logras adaptarlo a lo de las efemérides
Código PHP:
Ver original
  1. <html>
  2. <head>
  3. <title>CALENDARIO</title>
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  5. <style type="text/css">
  6. .calFondoCalendario {background-color:#EEEEEE;border: 1px solid #C9C9C9;border-width: 1px 1px 1px 1px;}
  7. #calFondoMes {background-color:#C9C9C9;font-family:Arial, Helvetica, sans-serif; font-size:11px;font-weight:bold;text-align:center;}
  8. .calFondoDias, .calFondoSemanas, .calFondoNumeroSemanas {background-color:#C9C9C9;font-family:Arial, Helvetica, sans-serif; font-size:9px; font-weight:900; }
  9. .calDias, .calFinSemana {font-family:Arial, Helvetica, sans-serif; font-size:11px; font-weight:700;}
  10. .calDias {color:#333333;}
  11. .calFinSemana {color:#FF0000;}
  12. .calDiaVacio {background-color:#FFFFFF;color:#C9C9C9;font-family:Arial, Helvetica, sans-serif; font-size:11px; font-weight:700;text-align:center;}
  13. #paginador {background-color:#EEEEEE;height:30px;padding-top:7px;}
  14. #paginador a:link, #paginador a:visited{background-color:#A4A4A4;color:#FFFFFF;font-family:Arial, Helvetica, sans-serif; font-size:9px; font-weight:900;text-decoration:none;padding:3px;border: 1px solid #C9C9C9;border-width: 1px 1px 1px 1px;}
  15. #paginador a:hover, #paginador a:active{background-color:#EEEEEE;color:#333333;font-family:Arial, Helvetica, sans-serif; font-size:9px; font-weight:900;text-decoration:none;padding:3pxborder: 1px solid #C9C9C9;border-width: 1px 1px 1px 1px;}
  16. </style>
  17. </head>
  18. <body bgcolor="#FFFFFF">
  19. <?php
  20. $URL = "OtraPagina.php";
  21. // Si viene vacía o no es numerica
  22. If ((!isset($_GET["mes"])) || (!is_numeric($_GET["mes"]))) {
  23. $Mes = date("m");
  24. } else {
  25. $Mes = $_GET["mes"];
  26. }
  27. If ((!isset($_GET["anyo"])) || (!is_numeric($_GET["anyo"]))) {
  28. $ElAnyo = date("Y");
  29. } else {
  30. $ElAnyo = $_GET["anyo"];
  31. }
  32. $FechaInicio = date("01/m/Y");
  33. list($dia, $mes, $anyo) = explode("/",$FechaInicio);
  34. $FechaInicio = mktime(0,0,0,$mes,$dia,$anyo);
  35. $FechaActual = date("01/".$Mes."/".$ElAnyo);
  36. list($dia, $mes, $anyo) = explode("/",$FechaActual);
  37. $FechaActual = mktime(0,0,0,$mes,$dia,$anyo);
  38. $FechaLimite = date("01/m/Y");
  39. list($dia, $mes, $anyo) = explode("/",$FechaLimite);
  40. $FechaLimite = mktime(0,0,0,$mes+4,$dia,$anyo);
  41. $FechaActual2 = date($Mes."/01/".$ElAnyo);
  42. ?>
  43. <div style="background-color:#EEEEEE;padding-top:20px;padding-bottom:20px;border: 1px solid #C9C9C9;border-width: 1px 1px 1px 1px;">
  44. <!-- Empezamos a montar el Calendario -->
  45. <div id="ContenedorCalendario">
  46. <table border="0" cellspacing="0px" cellpadding="0px" width="85%" align="center">
  47. <tr>
  48. <?php
  49. if ($FechaActual > $FechaLimite) { // Ha progresado 6 meses (empezó 01/11/2009 termina 01/05/2010)
  50. ?>
  51. <td id="calFondoMes">No puede hacer una reserva con mas de 6 meses de antelaci&oacute;n</td></tr></table>
  52. <div id="paginador" align="center">
  53. <a href="./calendario.php?mes=<?php echo date("m")?>&anyo=<?php echo date("Y")?>">Atr&aacute;s</a>
  54. </div>
  55. <?php
  56. } else if ($FechaActual < $FechaInicio) { // Se ha manipulado la query con una fecha menor a la de inicio (empezó 01/11/2009 quiere imprimir 01/10/2009)
  57. ?>
  58. <td id="calFondoMes">No puede hacer una reserva con una fecha ya pasada</td></tr></table>
  59. <div id="paginador" align="center">
  60. <a href="./calendario.php?mes=<?php echo date("m")?>&anyo=<?php echo date("Y")?>">Atr&aacute;s</a>
  61. </div>
  62. <?php
  63. } else {
  64. $div_fechaactual = explode ( "/", $FechaActual2);
  65. for ($i=0; $i<=2; $i++) {
  66. $mesAnyo = mktime ( 0, 0, 0, date("$div_fechaactual[0]")+$i, date("$div_fechaactual[1]"), date("$div_fechaactual[2]"));
  67. $ElMes = date("m", $mesAnyo);
  68. $ElAnyo =  date("Y", $mesAnyo);
  69. ?>
  70. <td>
  71. <table border="0" cellspacing="1px" cellpadding="3px" width="200px" align="center" class="calFondoCalendario">
  72. <tr align="center">
  73. <td colspan="8">
  74. <div id="calFondoMes">
  75. <?php echo Nombre_Mes($ElMes)?>,&nbsp;<?php echo $ElAnyo?>
  76. </div>
  77. </td>
  78. </tr>
  79. <?php echo DiasSemana(); // Sub días de la semana y número de la semana
  80. $PrimerDiaMes = NumeroPrimerDiaMes(1,$ElMes,$ElAnyo); // Número primer día mes
  81. $Semana = strftime("%W", strtotime($ElMes."/1/".$ElAnyo)); // Número de semana del mes actual
  82. $nSemanas31 = strftime("%W", strtotime("12/31/".$ElAnyo)); // Número de la última semanas del año
  83. $nSemanas01 = strftime("%W", strtotime("1/1/".$ElAnyo)); // Número de semana de la primera semana del año siguiente
  84. $DiaActual = 1;
  85. $DiasMesSiguiente = 0;
  86. for ($Fila = 0; $Fila<=5; $Fila++) {
  87. ?>
  88. <tr height="20px">
  89. <?php
  90. //  ============== Número de la Semana ==============
  91. if($Fila == 0){
  92. if($Semana == $nSemanas01) { // La última semana del año anterior comprende algún día del siguiente año
  93. $Semana = $nSemanas31;
  94. ?>
  95. <td class="calFondoNumeroSemanas"><?php echo $Semana?></td>
  96. <?php
  97. } else {
  98. ?>
  99. <td class="calFondoNumeroSemanas"><?php echo $Semana?></td>
  100. <?php
  101. }
  102. } else {
  103. if($Semana >= $nSemanas31) { // Primera semana del año
  104. $Semana = 1;
  105. } else {
  106. $Semana +=1;
  107. }
  108. ?>
  109. <td class="calFondoNumeroSemanas"><?php if (strlen($Semana) == 1) {echo "0".$Semana;} else { echo $Semana;}?></td>
  110. <?php
  111. }
  112. // ============== Fin  Número de la Semana ==============
  113. for ($Columna = 0; $Columna <=6; $Columna++) {
  114. if (($Fila == 0) && ($Columna < $PrimerDiaMes)) { // No hay día
  115. $UltimoDiaMesAnterior = UltimoDia(($ElMes-1),$ElAnyo);
  116. $DiasMesAnterior = (($UltimoDiaMesAnterior - ($PrimerDiaMes-1)) + $Columna);
  117. ?>
  118. <td class="calDiaVacio"><?php echo $DiasMesAnterior?></td>
  119. <?php
  120. } else if ($DiaActual > UltimoDia($ElMes, $ElAnyo)) { // No hay día
  121. $DiasMesSiguiente += 1;
  122. ?>
  123. <td class="calDiaVacio"><?php echo $DiasMesSiguiente?></td>
  124. <?
  125. }else {
  126. if (($Columna == 5) || ($Columna == 6)) { // es fin de semana
  127. ?>
  128. <td class="calFinSemana">
  129. <?php
  130. } else {
  131. ?>
  132. <td class="calDias">
  133. <?php
  134. }
  135. ?>
  136. <p id="calDias_<?php echo $DiaActual?>/<?php echo $ElMes?>/<?php echo $ElAnyo?>"><?php echo $DiaActual?></p>
  137. </td>
  138. <div id="Dia_<?php echo $DiaActual?>/<?php echo $ElMes?>/<?php echo $ElAnyo?>"></div>
  139. <?php
  140. $DiaActual += 1;
  141. }
  142. } //Columna
  143. ?>
  144. </tr>
  145. <?php
  146. } // Fila
  147. ?>
  148. </table></td>
  149. <?php
  150. } // i
  151. ?>
  152. </tr>
  153. </table>
  154. </div>
  155. <!-- Fin Calendario -->
  156. <!-- Paginador  -->
  157. <div id="paginador" align="center">
  158. <?php
  159. $sumames_fechaActual = explode ( "/", $FechaActual2);
  160. $masmeses = mktime (0, 0, 0, date("$sumames_fechaActual[0]")+1, 1, date("$sumames_fechaActual[2]"));
  161. $restames_fechaActual = explode ( "/", $FechaActual2);
  162. $menosmeses = mktime (0, 0, 0, date("$restames_fechaActual[0]")-1, 1, date("$restames_fechaActual[2]"));
  163. ?>
  164. <a href="./calendario.php?mes=<?php echo date("m", $menosmeses)?>&anyo=<?php echo date("Y", $menosmeses)?>">Anterior1</a>
  165. <a href="./calendario.php?mes=<?php echo date("m", $masmeses)?>&anyo=<?php echo date("Y", $masmeses)?>">Siguiente1</a>
  166. </div>
  167. <?php
  168. }
  169. ?>
  170. </div>
  171. <!-- Fin Paginador  -->
  172. </body>
  173. </html>
  174.  
  175. <?php
  176. //====================== Funciones ===========================
  177. function Nombre_Mes($ElMes) {
  178. switch ($ElMes) {
  179. case 1:
  180. echo "Enero";
  181. break;
  182. case 2:
  183. echo "Febrero";
  184. break;
  185. case 3:
  186. echo "Marzo";
  187. break;
  188. case 4:
  189. echo "Abril";
  190. break;
  191. case 5:
  192. echo "Mayo";
  193. break;
  194. case 6:
  195. echo "Junio";
  196. break;
  197. case 7:
  198. echo "Julio";
  199. break;
  200. case 8:
  201. echo "Agosto";
  202. break;
  203. case 9:
  204. echo "Septiembre";
  205. break;
  206. case 10:
  207. echo "Octubre";
  208. break;
  209. case 11:
  210. echo "Noviembre";
  211. break;
  212. case 12:
  213. echo "Diciembre";
  214. break;
  215. default;
  216. echo "ERROR!";
  217. }
  218. }
  219.  
  220. function UltimoDia($ElMes, $ElAnyo) {
  221. switch ($ElMes) {
  222. case 01:
  223. case 03:
  224. case 05:
  225. case 07:
  226. case 08:
  227. case 10:
  228. case 12:
  229. $FinMes = 31;
  230. return $FinMes;
  231. break;
  232. case 04:
  233. case 06:
  234. case 09:
  235. case 11:
  236. $FinMes = 30;
  237. return $FinMes;
  238. break;
  239. case 02:
  240. If (checkdate($ElAnyo,$ElMes,29)) { $FinMes = 29; return $FinMes; }else{ $FinMes = 28; return $FinMes;}
  241. break;
  242. default;
  243. $FinMes = 31;
  244. return $FinMes;
  245. }
  246. }
  247.  
  248.  
  249. function NumeroPrimerDiaMes($dia,$mes,$anyo){
  250. $numerodia = date('w', mktime(0,0,0,$mes,$dia,$anyo));
  251. if ($numerodia == 0)
  252. $numerodia = 6;
  253. else
  254. $numerodia--;
  255. return $numerodia;
  256. }
  257.  
  258.  
  259. function DiasSemana(){?>
  260. <tr align="center">
  261. <td rows="6"><div class="calFondoSemanas">Sem</div></td>
  262. <td><div class="calFondoDias">Lun</div></td>
  263. <td><div class="calFondoDias">Mar</div></td>
  264. <td><div class="calFondoDias">Mi&eacute;</div></td>
  265. <td><div class="calFondoDias">Jue</div></td>
  266. <td><div class="calFondoDias">Vie</div></td>
  267. <td><div class="calFondoDias">S&aacute;b</div></td>
  268. <td><div class="calFondoDias">Dom</div></td>
  269. </tr>
  270. <?php
  271. }
  272. ?>
Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />