- array_pad: documentation ( source)
- date: documentation ( source)
- array_fill: documentation ( source)
- strtotime: documentation ( source)
- range: documentation ( source)
<?php
function generate_calendar($month, $year) {
$calendar = [];
$week_number = (IntlCalendar::fromDateTime ("$year-$month-01"))->get(IntlCalendar::FIELD_WEEK_OF_YEAR);
$month_start = new DateTime("$year-$month-01");
// Generate the previous month's days
if ($first_day = $month_start->format('w')) {
$week = array_fill(1, $first_day, '');
}
// Generate the current month's days
$days_in_month = $month_start->format('t');
for ($i = 1; $i <= $days_in_month; $i++) {
$week[] = $i;
if (count($week) == 7) {
$calendar[$week_number] = $week;
$week_number++;
$week = [];
}
}
if ($week) {
// Generate empty days for the next month
$calendar[$week_number] = array_pad($week, 7, '');
}
return $calendar;
}
foreach (range(2020, 2025) as $year) {
foreach (range(1, 12) as $month) {
$month_name = date('F', strtotime("$year-$month-01"));
$calendar = generate_calendar($month, $year);
echo "<table>\n";
echo " <tr>\n";
echo " <th colspan='8'>$month_name $year</th>\n";
echo " </tr>\n";
echo " <tr>\n";
echo " <th>Week</th>\n";
echo " <th>Sun</th>\n";
echo " <th>Mon</th>\n";
echo " <th>Tue</th>\n";
echo " <th>Wed</th>\n";
echo " <th>Thu</th>\n";
echo " <th>Fri</th>\n";
echo " <th>Sat</th>\n";
echo " </tr>\n";
foreach ($calendar as $week_number => $week) {
echo " <tr>\n";
echo " <td>$week_number</td>\n";
foreach ($week as $day) {
echo " <td>$day</td>\n";
}
echo " </tr>\n";
}
echo "</table>\n\n";
}
}
This script was stopped while abusing our resources