php日历实现
实现 PHP 日历的基本方法
使用 PHP 创建一个简单的日历功能,可以通过以下步骤完成。日历可以显示当前月份的日期,并支持前后月份导航。
获取当前月份和年份
$month = date('m');
$year = date('Y');
计算月份的天数和第一天是星期几

$days_in_month = cal_days_in_month(CAL_GREGORIAN, $month, $year);
$first_day_of_month = 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>';
$day_count = 1;
echo '<tr>';
for ($i = 1; $i < $first_day_of_month; $i++) {
echo '<td></td>';
}
for ($i = $first_day_of_month; $i <= 7; $i++) {
echo '<td>' . $day_count . '</td>';
$day_count++;
}
echo '</tr>';
while ($day_count <= $days_in_month) {
echo '<tr>';
for ($i = 1; $i <= 7 && $day_count <= $days_in_month; $i++) {
echo '<td>' . $day_count . '</td>';
$day_count++;
}
echo '</tr>';
}
echo '</table>';
添加月份导航功能
处理导航参数

if (isset($_GET['month']) && isset($_GET['year'])) {
$month = $_GET['month'];
$year = $_GET['year'];
} else {
$month = date('m');
$year = date('Y');
}
生成导航链接
$prev_month = $month - 1;
$prev_year = $year;
if ($prev_month < 1) {
$prev_month = 12;
$prev_year--;
}
$next_month = $month + 1;
$next_year = $year;
if ($next_month > 12) {
$next_month = 1;
$next_year++;
}
echo '<a href="?month=' . $prev_month . '&year=' . $prev_year . '">Previous</a>';
echo ' ';
echo '<a href="?month=' . $next_month . '&year=' . $next_year . '">Next</a>';
高亮当前日期
标记当前日期
$current_day = date('j');
if ($day_count == $current_day && $month == date('m') && $year == date('Y')) {
echo '<td style="background-color: yellow;">' . $day_count . '</td>';
} else {
echo '<td>' . $day_count . '</td>';
}
完整代码示例
<?php
$month = isset($_GET['month']) ? $_GET['month'] : date('m');
$year = isset($_GET['year']) ? $_GET['year'] : date('Y');
$days_in_month = cal_days_in_month(CAL_GREGORIAN, $month, $year);
$first_day_of_month = date('N', strtotime("$year-$month-01"));
$prev_month = $month - 1;
$prev_year = $year;
if ($prev_month < 1) {
$prev_month = 12;
$prev_year--;
}
$next_month = $month + 1;
$next_year = $year;
if ($next_month > 12) {
$next_month = 1;
$next_year++;
}
echo '<a href="?month=' . $prev_month . '&year=' . $prev_year . '">Previous</a>';
echo ' ';
echo '<a href="?month=' . $next_month . '&year=' . $next_year . '">Next</a>';
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>';
$day_count = 1;
echo '<tr>';
for ($i = 1; $i < $first_day_of_month; $i++) {
echo '<td></td>';
}
for ($i = $first_day_of_month; $i <= 7 && $day_count <= $days_in_month; $i++) {
$current_date = ($day_count == date('j') && $month == date('m') && $year == date('Y')) ?
'<td style="background-color: yellow;">' . $day_count . '</td>' :
'<td>' . $day_count . '</td>';
echo $current_date;
$day_count++;
}
echo '</tr>';
while ($day_count <= $days_in_month) {
echo '<tr>';
for ($i = 1; $i <= 7 && $day_count <= $days_in_month; $i++) {
$current_date = ($day_count == date('j') && $month == date('m') && $year == date('Y')) ?
'<td style="background-color: yellow;">' . $day_count . '</td>' :
'<td>' . $day_count . '</td>';
echo $current_date;
$day_count++;
}
echo '</tr>';
}
echo '</table>';
?>
这段代码实现了一个基本的 PHP 日历功能,包括月份导航和当前日期高亮显示。可以根据需要进一步扩展,例如添加事件管理或更复杂的样式。






