Foros del Web » Programando para Internet » PHP »

[APORTE] Calendario

Estas en el tema de [APORTE] Calendario en el foro de PHP en Foros del Web. Este es un simple calendario, muy útil cuando se va a crear sistemas que requiere consultas a la base de datos buscando por fechas. Se ...
  #1 (permalink)  
Antiguo 08/08/2010, 02:10
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
[APORTE] Calendario

Este es un simple calendario, muy útil cuando se va a crear sistemas que requiere consultas a la base de datos buscando por fechas. Se selecciona la fecha y lo ingresas en un campo tipo texto y luego haces la consulta.
Código PHP:
Ver original
  1. <?php
  2. $m = isset($_GET['m']) ? $_GET['m'] : 0;
  3.  
  4. /**
  5.  * date('F') -> Una representación textual completa de un mes, como enero o marzo
  6.  * date('Y') -> Una representación numérica completa de un año, 4 dígitos
  7.  */
  8. $arrDate = explode(' ', date('F Y', strtotime('First day of ' . $m . ' month')));
  9. $lastDayOfMonth = date('d', strtotime('last day of ' . $arrDate[0] . ' ' . $arrDate[1]));
  10. $calendar = '';
  11.  
  12. for($i=1; $i<=$lastDayOfMonth; $i++){
  13.     $numDayWeek = date('w', mktime(0, 0, 0, (date('n') + $m), $i));
  14.     $js = date('Y-m-d', mktime(0, 0, 0, (date('n') + $m), $i));
  15.  
  16.     $calendar .= ($numDayWeek == 0 && $i != 1) ? '</tr><tr>' : '';
  17.     $calendar .= ($i == 1 && $numDayWeek > 0)
  18.         ? '<td colspan="' . $numDayWeek . '" class="opac"></td><td onclick="alert(\'' . $js . '\')">' . $i . '</td>'
  19.         : '<td onclick="alert(\'' . $js . '\')">' . $i . '</td>';
  20.     $calendar .= ($i == $lastDayOfMonth && (6 - $numDayWeek) > 0)
  21.         ? '<td colspan="' . (6 - $numDayWeek) . '" class="opac">'
  22.         : '';
  23. }
  24. ?>
  25. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  26. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  27. <head>
  28. <style>
  29. *{margin: 0; padding: 0;}
  30. table{
  31.     width: 250px;
  32.     height: 300px;
  33. }
  34. td{
  35.     text-align: center;
  36.     cursor: pointer;
  37.     background-color: #369;
  38.     color: #fff;
  39. }
  40. .opac{
  41.     background-color: #6698c7;
  42. }
  43. </style>
  44. </head>
  45. <body>
  46. <table>
  47.     <tr>
  48.         <th colspan="7"><?php echo $arrDate[0]; ?> <?php echo $arrDate[1]; ?></th>
  49.     </tr><tr>
  50.         <th colspan="3"><a href="<?php echo $_SERVER['PHP_SELF']; ?>?m=<?php echo ($m - 12); ?>">&lt;&lt;<?php echo $arrDate[1] - 1 ?></th>
  51.         <th></th>
  52.         <th colspan="3"><a href="<?php echo $_SERVER['PHP_SELF']; ?>?m=<?php echo ($m + 12); ?>"><?php echo $arrDate[1] + 1; ?>&gt;&gt;</a></th>
  53.     </tr><tr>
  54.         <th>S</th>
  55.         <th>M</th>
  56.         <th>T</th>
  57.         <th>W</th>
  58.         <th>T</th>
  59.         <th>F</th>
  60.         <th>S</th>
  61.     </tr><tr>
  62.     <?php echo $calendar; ?>
  63.     </tr><tr>
  64.         <th><a href="<?php echo $_SERVER['PHP_SELF']; ?>?m=<?php echo ($m - 1); ?>">&lt;&lt;</a></th>
  65.         <th colspan="5"></th>
  66.         <th><a href="<?php echo $_SERVER['PHP_SELF']; ?>?m=<?php echo ($m + 1); ?>">&gt;&gt;</a></th>
  67.     </tr>
  68. </table>
  69. </body>
  70. </html>
En internet hay muchos códigos que son más robustos que el que estoy presentando, como por ejemplo http://www.easyphpcalendar.com/. El propósito de este código es para que tengan una idea de que con PHP se pueden crear este tipo de aplicaciones sin escribir tanto código. Si se fijan solo tiene 11 líneas de código de PHP (sin contar lo que está junto con el HTML y podía ser menos, esto es a causa de las líneas que contienen código de javascript y la parte que añade los td al final como parte de la demostración de lo que se puede hacer con CSS).

Notas:
2011-01-29 -> Corrección en la variable $arrDate, se corrigió error de que cuando el último día corriente es mayor al último día del siguiente mes, brinca al mes que tiene la misma cantidad de día. Se cambio del formato strtotime($m. ' month') a strtotime('First day of ' . $m . ' month').
2012-08-09 -> Se quitó algunas letras de la variable arrDate que no se estaban usando en el código
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 09/08/2012 a las 07:04 Razón: Correcciones

Etiquetas: calendario, aportes
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

SíEste tema le ha gustado a 7 personas




La zona horaria es GMT -6. Ahora son las 05:02.