Script PHP que genera un calendario mensual simple para el mes actual, mostrando días de la semana y resaltando el mes vigente en una tabla HTML clara y funcion
<?php
// Establecemos la zona horaria para evitar advertencias
date_default_timezone_set('Europe/Rome');
// Obtenemos el mes y año actuales
$anno = date('Y');
$mese = date('n'); // número de mes sin cero inicial
// Nombres de los días de la semana, de lunes a domingo
$giorni_settimana = ['Lun', 'Mar', 'Mer', 'Gio', 'Ven', 'Sab', 'Dom'];
// Primer día del mes (timestamp)
$primo_giorno_mese = mktime(0, 0, 0, $mese, 1, $anno);
// Número de días en el mes
$numero_giorni = date('t', $primo_giorno_mese);
// Día de la semana del primer día del mes (1 = lunes, 7 = domingo)
// date('N') devuelve 1 (lun) a 7 (dom)
$giorno_settimana_primo = date('N', $primo_giorno_mese);
// Comenzamos a construir el calendario
?>
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<title>Calendario <?php echo date('F Y', $primo_giorno_mese); ?></title>
<style>
table {
border-collapse: collapse;
width: 300px;
margin: 20px auto;
font-family: Arial, sans-serif;
}
th, td {
border: 1px solid #999;
text-align: center;
padding: 8px;
width: 14.28%; /* 100% / 7 días */
}
th {
background-color: #f2f2f2;
}
td {
height: 40px;
}
td.vuoto {
background-color: #eee;
}
</style>
</head>
<body>
<h2 style="text-align:center;">Calendario de <?php echo date('F Y', $primo_giorno_mese); ?></h2>
<table>
<thead>
<tr>
<?php foreach ($giorni_settimana as $giorno): ?>
<th><?php echo $giorno; ?></th>
<?php endforeach; ?>
</tr>
</thead>
<tbody>
<tr>
<?php
// Insertamos las celdas vacías antes del primer día del mes
for ($i = 1; $i < $giorno_settimana_primo; $i++) {
echo '<td class="vuoto"></td>';
}
// Contador de días
$conta_giorni = 1;
// Completamos la primera fila
for ($i = $giorno_settimana_primo; $i <= 7; $i++) {
echo '<td>' . $conta_giorni . '</td>';
$conta_giorni++;
}
echo '</tr>';
// Filas siguientes
while ($conta_giorni <= $numero_giorni) {
echo '<tr>';
for ($i = 1; $i <= 7; $i++) {
if ($conta_giorni <= $numero_giorni) {
echo '<td>' . $conta_giorni . '</td>';
$conta_giorni++;
} else {
// Celdas vacías después del fin del mes
echo '<td class="vuoto"></td>';
}
}
echo '</tr>';
}
?>
</tbody>
</table>
</body>
</html>
?>PHP 7.0+ (entorno de ejecución)
Servidor web con soporte PHP (ej. Apache, Nginx)
Sin dependencias externas
CONFIG: no se requiere configuración externa