Primero obtenemos la fecha actual en un vector asociativo llamado $hoy:
$hoy = getdate();
Luego podemos acceder a los siguientes elementos del vector:
"seconds" - segundos
"minutes" - minutos
"hours" - horas
"mday" - día del mes
"wday" - día de la semana, en número
"mon" - mes, en número
"year" - año, en número
"yday" - día del año, en número; por ejemplo, "299"
"weekday" - día de la semana, en texto, completo; por ejemplo, "Friday"
"month" - mes, en texto, completo; por ejemplo, "January"
Obtenemos ahora el primer día del mes y año actual, utilizamos la función mktime para indicar
esta fecha (int mktime ( int hour, int minute, int second, int month, int day, int year [, int is_dst])):
$primerDia = getdate(mktime(0,0,0,$hoy['mon'],1,$hoy['year']));
Obtenemos el último día del mes (hay que tener en cuenta que el último día de cada mes se puede
expresar como el día "0" del mes siguiente, no el día -1)
$ultimoDia = getdate(mktime(0,0,0,$hoy['mon']+1,0,$hoy['year']));
La primer fila de la tabla muestra el nombre de mes y el año:
echo ' <tr><th colspan="7">'.$meses[$hoy['mon']-1]." - ".$hoy['year']."</th></tr>";
La segunda fila contiene los nombres de los días de la semana:
echo ' <td>Lu</td><td>Ma</td><td>Mi</td><td>Ju</td>';
echo ' <td>Vi</td><td>Sa</td><td>Do</td></tr>';
Creamos tantos casilleros vacíos en la tabla segón el número de día del primer día del mes ($primerDia['wday'] es el
día de la semana en número):
for($i=1;$i<$primerDia['wday'];$i++)
{
echo '<td> </td>';
}
Finalizamos la primer hilera de números del calendario con:
$actdia = 0;
for($i=$primerDia['wday'];$i<=7;$i++)
{
$actdia++;
echo "<td>$actdia</td>";
}
Calculamos la cantidad de filas que se llenan con días por completo (es decir sin casillas vacías):
$cantSemanas = floor(($ultimoDia['mday']-$actdia)/7);
Imprimimos las filas restantes:
for ($i=0;$i<$cantSemanas;$i++)
{
echo '<tr>';
for ($j=0;$j<7;$j++)
{
$actdia++;
echo "<td>$actdia</td>";
}
echo '</tr>';
}
La última fila en caso que tenga casillas vacías la mostramos con:
if ($actdia < $ultimoDia['mday'])
{
echo '<tr>';
for ($i=0; $i<7;$i++)
{
$actdia++;
if ($actdia <= $ultimoDia['mday'])
{
echo "<td>$actdia</td>";
}
else
{
echo '<td> </td>';
}
}
echo '</tr>';
}