Foros del Web » Programando para Internet » PHP »

Extender este calendario

Estas en el tema de Extender este calendario en el foro de PHP en Foros del Web. Hola a to2: Tengo un código (ahora no recuerdo bien de donde lo descargué, creo que de LWP) con él obtengo el mes en curso ...
  #1 (permalink)  
Antiguo 13/01/2011, 07:57
Usuario no validado
 
Fecha de Ingreso: abril-2010
Ubicación: La habana
Mensajes: 229
Antigüedad: 14 años, 7 meses
Puntos: 4
Extender este calendario

Hola a to2:
Tengo un código (ahora no recuerdo bien de donde lo descargué, creo que de LWP) con él obtengo el mes en curso así como el día de hoy; lo modifiqué para que al hacer clic en cada día me de la efeméride del día en cuestión según una tabla que tengo en MySql.
Lo que quiero es ver cómo lo puedo ajustar para que me salga similar al de VS.NET, es decir, que me dé la posibilidad de ir al manos al mes siguiente y al mes anterior con eso me conformo.
Alguien sabe cómo, sé que la cosa anda por aquí:
Código PHP:
 date("m")+
Pero no sé cómo acomodar esto de manera que pueda tranquilamente obtener el mes anterior y el mes siguiente con los días correctamente ubicados.
En lo que me puedan ayudar¿?
Aquí va el código:
Código PHP:
<?php

  $fecha 
date("d m Y D"); // obtener la fecha actual del sistema
  
$dia $fecha[0].$fecha[1]; // obtener el dia actual
  
$nMes $fecha[3].$fecha[4]; // obtener el mes actual
  
$nomdia $fecha[11].$fecha[12].$fecha[13]; // obtener el nombre dia actual
  
$anyo $fecha[6].$fecha[7].$fecha[8].$fecha[9];
  if(
$nomdia=="Sun"$pos=1// calcular la posicion en dia de la semana
  
else if($nomdia=="Mon"$pos=2;
  else if(
$nomdia=="Tue"$pos=3;
  else if(
$nomdia=="Wed"$pos=4;
  else if(
$nomdia=="Thu"$pos=5;
  else if(
$nomdia=="Fri"$pos=6;
  else if(
$nomdia=="Sat"$pos=7;
  if(
$nMes==1$nomMes="Enero";
  else if(
$nMes==2$nomMes="Febrero";
  else if(
$nMes==3$nomMes="Marzo";
  else if(
$nMes==4$nomMes="Abril";
  else if(
$nMes==5$nomMes="Mayo";
  else if(
$nMes==6$nomMes="Junio";
  else if(
$nMes==7$nomMes="Julio";
  else if(
$nMes==8$nomMes="Agosto";
  else if(
$nMes==9$nomMes="Septiembre";
  else if(
$nMes==10$nomMes="Octubre";
  else if(
$nMes==11$nomMes="Noviembre";
  else if(
$nMes==12$nomMes="Diciembre";
  echo 
"<div id=\"mes\"><p><span id=\"nombremes\">".$nomMes."</span><span id=\"year\">";
  echo 
$anyo."</span></p>";
  echo 
"\n<table><tr id=\"dias\"><td>Dom</td><td>Lun</td><td>Mat</td><td>Mie</td>";
  echo 
"<td>Jue</td><td>Vie</td><td>Sab</td></tr>";
  
// calcular dia de la semana del dia 1 del mes actual
  
$diaSem $dia;
  do{ 
$diaSem -= 7; }while($diaSem>7);
  if(
$diaSem<=0$diaSem+=7;
  
$pos $pos-$diaSem+1;
  if(
$pos<=0$pos 7-($pos*-1);
  
// imprimir todos los dias del mes
  
echo "\n<tr>";
  for(
$dd=1;$dd<$pos;$dd++) echo "<td class=\"vacio\"></td>";
  for(
$dd=1;$dd<=cal_days_in_month(CAL_GREGORIAN,$nMes,$anyo);$dd++){
    echo 
"<td".($dia==$dd?" id=\"diaactual\"":"")."><a href=\"index.php?sec=prueba&num=$dd&mes=$nomMes\">$dd</a></td>";
    if(++
$pos>7){
      echo
"</tr>\n";
      
$pos=1;
    }
  }
  echo 
"</tr></table>";
?>
Aquí va el css:
Código HTML:
 h1 { width:17em; margin:1em auto; text-align:center; font-style:italic;
       border-bottom:7px ridge #00599B; }
    div#mes { text-align:center; border:double 4px #00599B; width:30em; margin:auto;
       height:18.5em; overflow:hidden; background-color:#ffffff; float:left;}
    div#mes p { white-space:pre; }
    td { width:3em; border:solid 1px black; font-weight:bold; }
    td.vacio { width:3em; border:none; }
    td#diaactual { background-color:#A3DAFB; border:solid 1px #000000; }
    table { border:groove 5px #A3DAFB; display:block; margin:0.5em 5em; }
    tr#dias td { background-color:#A3DAFB; }
    span#nombremes { border:solid 1px #00599B; background-color:#A3DAFB; font-size:1.2em;
       padding:0 0.5em; }
    span#year { border:solid 1px #00599B; background-color:#A3DAFB; font-size:1.2em;
       margin-left:4.3em; padding:0 0.5em; }
    a { text-decoration:none; color:black; }
Salu2 y Gracias
  #2 (permalink)  
Antiguo 13/01/2011, 08:09
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 10 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;" />
  #3 (permalink)  
Antiguo 13/01/2011, 10:24
Usuario no validado
 
Fecha de Ingreso: abril-2010
Ubicación: La habana
Mensajes: 229
Antigüedad: 14 años, 7 meses
Puntos: 4
Respuesta: Extender este calendario

No funciona,no sé que pasa, le puse extensión html y si funciona (solo html claro), pero con todo junto no sale nada en mi navegador, solo el clasico No se pudo mostrar la pag pruebe actualizar etc.
Tengo que nombrer de alguna forma el archivo o hacer alguna otra cosa, no vi ningún include ni nada que me diga que tengo que trozear esto.
Saludos y al tanto.
  #4 (permalink)  
Antiguo 13/01/2011, 15:04
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 10 meses
Puntos: 126
Respuesta: Extender este calendario

Hola

No sé si te he entendido. Has de guardar el archivo con el nombre (calendario) y con extensión .php. El nombre puedes cambiarselo si cambias el target de los links de paginación
Cita:
<a href="./calendario.php?mes=<?php echo date("m", $menosmeses)?>&anyo=<?php echo date("Y", $menosmeses)?>">Anterior1</a>

<a href="./calendario.php?mes=<?php echo date("m", $masmeses)?>&anyo=<?php echo date("Y", $masmeses)?>">Siguiente1</a>
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;" />

Etiquetas: calendario, extender
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 09:16.