Lenguaje PHP

Calendario en PHP ciclo FOR: Ejemplo completo

2 formas de crear calendarios en PHP

Calendario en PHP ciclo FOR. En este articulo veremos cómo crear un simple calendario usando PHP apoyados del ciclo FOR. Además, el calendario es muy dinámico y podemos navegador dentro de los meses del año.

Calendario en PHP ciclo FOR

Crear un calendario es muy sencillo, Primeramente, necesitamos lo siguiente:

Calendario en PHP ciclo FOR
Calendario en PHP ciclo FOR

¿Como crear un calendario sencillo en PHP?

Para lograr el objetivo tenemos que apoyarnos de un array para los meses del año, además de definir la hora en PHP (date_default_timezone_set) podemos navegar por los distintos meses y años del calendario.

Para cambiar Y/o navegar entre los meses usaremos enlaces con el método $_REQUEST o método GET. Sin embargo, también podemos usar el método POST si no queremos dejar rastro en la URL del navegador.

// Enlace HTML
<a href="<?php echo $_SERVER["PHP_SELF"]."?mes=". $prev_month."&anio=".$prev_year; ?>" style="color:#FFFFFF">Anterior</a>

Primera forma: Calendario en PHP ciclo FOR

Usaremos una variable llamada $monthNames para definir los meses del año en idioma español de enero hasta diciembre.

Código de ejemplo (Copiar y pegar para probar):

<?php
date_default_timezone_set("America/Lima");
$monthNames = array("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", 
"Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre");

if (!isset($_REQUEST["mes"])) $_REQUEST["mes"] = date("n");
if (!isset($_REQUEST["anio"])) $_REQUEST["anio"] = date("Y");

$cMonth = $_REQUEST["mes"];
$cYear = $_REQUEST["anio"];


$prev_year = $cYear;
$next_year = $cYear;
$prev_month = $cMonth-1;
$next_month = $cMonth+1;

if ($prev_month == 0 ) {
$prev_month = 12;
$prev_year = $cYear - 1;
}
if ($next_month == 13 ) {
$next_month = 1;
$next_year = $cYear + 1;
}
?>
<table width="200" style="border:1px solid #999">
<tr align="center">
<td bgcolor="#999999" style="color:#FFFFFF">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="50%" align="left"><a href="<?php echo $_SERVER["PHP_SELF"]."?mes=". $prev_month."&anio=".$prev_year; ?>" style="color:#FFFFFF">Anterior</a></td>
<td width="50%" align="right"><a href="<?php echo $_SERVER["PHP_SELF"]."?mes=". $next_month."&anio=".$next_year; ?>" style="color:#FFFFFF">Siguiente</a></td>
</tr>
</table>
</td>
</tr>
<tr>
<td align="center">
<table width="100%" border="0" cellpadding="2" cellspacing="2">
<tr align="center">
<td colspan="7" bgcolor="#999999" style="color:#FFFFFF"><strong><?php echo $monthNames[$cMonth-1].' '.$cYear; ?></strong></td>
</tr>
<tr>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>Domingo</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>Lunes</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>Martes</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>Miercoles</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>Jueves</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>Viernes</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>Sabado</strong></td>

</tr>
<?php 
$timestamp = mktime(0,0,0,$cMonth,1,$cYear);
$maxday = date("t",$timestamp);
$thismonth = getdate ($timestamp);
$startday = $thismonth['wday'];
for ($i=0; $i<($maxday+$startday); $i++) {
if(($i % 7) == 0 ) echo "<tr>";
if($i < $startday) echo "<td></td>";
else {?>
<td align="center" valign="middle" height="20px" <?php if ((date("d")== $i - $startday + 1) && $cMonth==date("n")){?> style="background:#999; color:#FFF"<?php }?>> <?php echo ($i - $startday + 1) ?> </td>
<?php }
if(($i % 7) == 6 ) echo "</tr>";
}
?>
</table>
</td>
</tr>
</table>

Explicación del código anterior

Al ejecutar el script anterior mostrara un calendario que cumple su función: simple y modificable tanto en css, pero tiene dos detalles:

  • Al pinchar en su menú, y luego querer volver al mes actual deja de señalar el día de hoy. (supongo que esto es reparable simplemente creando un TD central y linkear como index.)
  • La semana empieza desde lunes, pero los días no, por ejemplo, hoy es lunes 20 de septiembre 2021. en el calendario pone martes 20.

Estos dos inconvenientes fueron corregidos en esta versión de calendario, así que ya no hay esos inconvenientes,

Salida en el navegador

Podemos agregarle más estilo o incluso agregarle la librería Bootstrap para darle una interfaz más profesional.

Segundo Forma: Calendario en PHP ciclo FOR

Este segundo ejemplo es más sencillo que el anterior ya que no posee los enlaces para navegar entre los meses del año, pero es muy funcional para mostrar los días y el mes actual de manera correcta.

<?php
$days_count = date('t');
$current_day = date('d');
$week_day_first = date('N', mktime(0, 0, 0, date('m'), 1, date('Y')));
?>

<table>
<tr>
<th>LU</th>
<th>MA</th>
<th>MI</th>
<th>JU</th>
<th>VI</th>
<th style="color: red;">SA</th>
<th style="color: red;">DO</th>
</tr>
<?php for ($w = 1 - $week_day_first + 1; $w <= $days_count; $w = $w + 7): ?>
<tr>
<?php $counter = 0; ?>
<?php for ($d = $w; $d <= $w + 6; $d++): ?>
<td style="<?php if ($counter > 4): ?>color: red;<?php endif; ?><?php if ($current_day == $d): ?>background-color:yellow; color:green;font-weight:bold;<?php endif; ?>">
<?php echo($d > 0 ? ($d > $days_count ? '' : $d) : '') ?>
</td>
<?php $counter++; ?>
<?php endfor; ?>
</tr>
<?php endfor; ?>
</table>

La salida en el navegador:

Es un aspecto muy básico, pero resalta sábado y domingo en rojo. además, el día actual marca en un casillero como por ejemplo el día 28 de marzo del 2022. Sin embargo, al ser básico es muy configurable, pueden agregarle más estilos y/o librerías para convertirlo en un calendario profesional.

CONCLUSIÓN

En este articulo hemos proporcionado 2 ejemplos completos para implementar calendarios en PHP, hemos usado el ciclo FOR, Método POST o Método GET según su preferencia.

Además, pueden agregarle conexión a base de datos MySQL y usar PDO como conector. Sin embargo, recomiendo usar PDO en las consultas SQL por su seguridad. porque tenemos que protegernos de las inyecciones SQL.

Espero que estos ejemplos les ayude en sus proyectos web y no se olviden de compartir en las redes sociales.

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba