php实现一个日历表
实现PHP日历表的方法
使用PHP内置函数生成日历
PHP内置的cal_days_in_month和date函数可以方便地生成日历。以下代码创建一个基本的月历视图:

function generateCalendar($year, $month) {
$daysInMonth = cal_days_in_month(CAL_GREGORIAN, $month, $year);
$firstDay = date('N', strtotime("$year-$month-01"));
echo "<table border='1'>";
echo "<tr><th>Mon</th><th>Tue</th><th>Wed</th><th>Thu</th><th>Fri</th><th>Sat</th><th>Sun</th></tr>";
$dayCount = 1;
echo "<tr>";
for ($i = 1; $i < $firstDay; $i++) {
echo "<td></td>";
}
for ($i = $firstDay; $i <= 7; $i++) {
echo "<td>$dayCount</td>";
$dayCount++;
}
echo "</tr>";
while ($dayCount <= $daysInMonth) {
echo "<tr>";
for ($i = 1; $i <= 7 && $dayCount <= $daysInMonth; $i++) {
echo "<td>$dayCount</td>";
$dayCount++;
}
echo "</tr>";
}
echo "</table>";
}
generateCalendar(date('Y'), date('m'));
添加导航功能
扩展日历功能,添加月份和年份导航:

function calendarWithNavigation() {
$year = isset($_GET['year']) ? $_GET['year'] : date('Y');
$month = isset($_GET['month']) ? $_GET['month'] : date('m');
$prevMonth = $month - 1;
$prevYear = $year;
if ($prevMonth < 1) {
$prevMonth = 12;
$prevYear--;
}
$nextMonth = $month + 1;
$nextYear = $year;
if ($nextMonth > 12) {
$nextMonth = 1;
$nextYear++;
}
echo "<div style='text-align:center;'>";
echo "<a href='?year=$prevYear&month=$prevMonth'>Previous</a> ";
echo date('F Y', strtotime("$year-$month-01"));
echo " <a href='?year=$nextYear&month=$nextMonth'>Next</a>";
echo "</div>";
generateCalendar($year, $month);
}
calendarWithNavigation();
高亮当前日期
修改日历函数,突出显示当前日期:
function generateCalendarWithHighlight($year, $month) {
$currentDay = date('j');
$currentMonth = date('n');
$currentYear = date('Y');
$daysInMonth = cal_days_in_month(CAL_GREGORIAN, $month, $year);
$firstDay = date('N', strtotime("$year-$month-01"));
echo "<table border='1'>";
echo "<tr><th>Mon</th><th>Tue</th><th>Wed</th><th>Thu</th><th>Fri</th><th>Sat</th><th>Sun</th></tr>";
$dayCount = 1;
echo "<tr>";
for ($i = 1; $i < $firstDay; $i++) {
echo "<td></td>";
}
for ($i = $firstDay; $i <= 7; $i++) {
$highlight = ($dayCount == $currentDay && $month == $currentMonth && $year == $currentYear) ? "style='background-color:yellow;'" : "";
echo "<td $highlight>$dayCount</td>";
$dayCount++;
}
echo "</tr>";
while ($dayCount <= $daysInMonth) {
echo "<tr>";
for ($i = 1; $i <= 7 && $dayCount <= $daysInMonth; $i++) {
$highlight = ($dayCount == $currentDay && $month == $currentMonth && $year == $currentYear) ? "style='background-color:yellow;'" : "";
echo "<td $highlight>$dayCount</td>";
$dayCount++;
}
echo "</tr>";
}
echo "</table>";
}
使用DateTime类实现
更现代的PHP实现方式,使用DateTime类:
function calendarUsingDateTime($year, $month) {
$date = new DateTime("$year-$month-01");
$daysInMonth = $date->format('t');
$firstDay = $date->format('N');
echo "<table border='1'>";
echo "<tr><th>Mon</th><th>Tue</th><th>Wed</th><th>Thu</th><th>Fri</th><th>Sat</th><th>Sun</th></tr>";
$dayCount = 1;
echo "<tr>";
for ($i = 1; $i < $firstDay; $i++) {
echo "<td></td>";
}
for ($i = $firstDay; $i <= 7; $i++) {
echo "<td>$dayCount</td>";
$dayCount++;
}
echo "</tr>";
while ($dayCount <= $daysInMonth) {
echo "<tr>";
for ($i = 1; $i <= 7 && $dayCount <= $daysInMonth; $i++) {
echo "<td>$dayCount</td>";
$dayCount++;
}
echo "</tr>";
}
echo "</table>";
}
这些方法提供了不同复杂度的PHP日历实现,从基本功能到包含导航和高亮功能的完整日历系统。可以根据项目需求选择适合的实现方式或进行组合使用。






