php实现当月日历
PHP实现当月日历的方法
使用PHP生成当月日历可以通过日期函数和循环结构实现。以下是几种常见的实现方式:
基础实现方式
获取当前月份的第一天和最后一天,计算该月总天数及第一天是星期几:

$currentYear = date('Y');
$currentMonth = date('m');
$daysInMonth = date('t', strtotime("$currentYear-$currentMonth-01"));
$firstDayOfWeek = date('w', strtotime("$currentYear-$currentMonth-01"));
生成日历表格:
echo '<table border="1">';
echo '<tr><th>Sun</th><th>Mon</th><th>Tue</th><th>Wed</th><th>Thu</th><th>Fri</th><th>Sat</th></tr>';
$dayCount = 1;
echo '<tr>';
for ($i = 0; $i < $firstDayOfWeek; $i++) {
echo '<td></td>';
}
for ($i = $firstDayOfWeek; $i < 7; $i++) {
echo "<td>$dayCount</td>";
$dayCount++;
}
echo '</tr>';
while ($dayCount <= $daysInMonth) {
echo '<tr>';
for ($i = 0; $i < 7 && $dayCount <= $daysInMonth; $i++) {
echo "<td>$dayCount</td>";
$dayCount++;
}
echo '</tr>';
}
echo '</table>';
更灵活的封装函数
创建一个可重用的日历生成函数:

function generateCalendar($year = null, $month = null) {
$year = $year ?? date('Y');
$month = $month ?? date('m');
$firstDay = strtotime("$year-$month-01");
$daysInMonth = date('t', $firstDay);
$firstDayOfWeek = date('w', $firstDay);
$calendar = '<table border="1">';
$calendar .= '<tr><th>Sun</th><th>Mon</th><th>Tue</th><th>Wed</th><th>Thu</th><th>Fri</th><th>Sat</th></tr>';
$dayCount = 1;
$calendar .= '<tr>';
for ($i = 0; $i < $firstDayOfWeek; $i++) {
$calendar .= '<td></td>';
}
for ($i = $firstDayOfWeek; $i < 7; $i++) {
$calendar .= "<td>$dayCount</td>";
$dayCount++;
}
$calendar .= '</tr>';
while ($dayCount <= $daysInMonth) {
$calendar .= '<tr>';
for ($i = 0; $i < 7 && $dayCount <= $daysInMonth; $i++) {
$calendar .= "<td>$dayCount</td>";
$dayCount++;
}
$calendar .= '</tr>';
}
$calendar .= '</table>';
return $calendar;
}
echo generateCalendar();
带事件标记的日历
扩展功能,支持在特定日期添加事件标记:
function generateCalendarWithEvents($events = [], $year = null, $month = null) {
$year = $year ?? date('Y');
$month = $month ?? date('m');
$firstDay = strtotime("$year-$month-01");
$daysInMonth = date('t', $firstDay);
$firstDayOfWeek = date('w', $firstDay);
$calendar = '<table border="1">';
$calendar .= '<tr><th>Sun</th><th>Mon</th><th>Tue</th><th>Wed</th><th>Thu</th><th>Fri</th><th>Sat</th></tr>';
$dayCount = 1;
$calendar .= '<tr>';
for ($i = 0; $i < $firstDayOfWeek; $i++) {
$calendar .= '<td></td>';
}
for ($i = $firstDayOfWeek; $i < 7; $i++) {
$dayContent = $dayCount;
if (isset($events[$dayCount])) {
$dayContent .= '<br><small>' . $events[$dayCount] . '</small>';
}
$calendar .= "<td>$dayContent</td>";
$dayCount++;
}
$calendar .= '</tr>';
while ($dayCount <= $daysInMonth) {
$calendar .= '<tr>';
for ($i = 0; $i < 7 && $dayCount <= $daysInMonth; $i++) {
$dayContent = $dayCount;
if (isset($events[$dayCount])) {
$dayContent .= '<br><small>' . $events[$dayCount] . '</small>';
}
$calendar .= "<td>$dayContent</td>";
$dayCount++;
}
$calendar .= '</tr>';
}
$calendar .= '</table>';
return $calendar;
}
$events = [
5 => '会议',
15 => '生日',
20 => '截止日期'
];
echo generateCalendarWithEvents($events);
使用DateTime类实现
更现代的PHP日期处理方式:
function generateCalendarModern($year = null, $month = null) {
$date = new DateTime();
if ($year && $month) {
$date->setDate($year, $month, 1);
}
$year = $date->format('Y');
$month = $date->format('m');
$daysInMonth = $date->format('t');
$firstDayOfWeek = $date->format('w');
$calendar = '<table border="1">';
$calendar .= '<tr><th>Sun</th><th>Mon</th><th>Tue</th><th>Wed</th><th>Thu</th><th>Fri</th><th>Sat</th></tr><tr>';
$dayCount = 1;
for ($i = 0; $i < $firstDayOfWeek; $i++) {
$calendar .= '<td></td>';
}
for ($i = $firstDayOfWeek; $i < 7; $i++) {
$calendar .= "<td>$dayCount</td>";
$dayCount++;
}
$calendar .= '</tr>';
while ($dayCount <= $daysInMonth) {
$calendar .= '<tr>';
for ($i = 0; $i < 7 && $dayCount <= $daysInMonth; $i++) {
$calendar .= "<td>$dayCount</td>";
$dayCount++;
}
$calendar .= '</tr>';
}
$calendar .= '</table>';
return $calendar;
}
echo generateCalendarModern();
以上方法提供了从基础到高级的PHP日历实现方案,可以根据具体需求选择适合的方式或进行进一步定制。






