当前位置:首页 > PHP

php实现当月日历

2026-02-16 20:02:07PHP

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日期处理方式:

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日历实现方案,可以根据具体需求选择适合的方式或进行进一步定制。

标签: 当月日历
分享给朋友:

相关文章

vue日历表格实现

vue日历表格实现

实现Vue日历表格的基本步骤 使用Vue实现日历表格需要处理日期数据生成、渲染和交互逻辑。以下是核心实现方法: 安装依赖(可选) 若需复杂功能可引入date-fns或dayjs等日期库: npm…

vue实现全年日历

vue实现全年日历

实现全年日历的基本思路 使用Vue实现全年日历需要结合日期计算、数据渲染和交互逻辑。核心在于生成全年12个月的日历数据,并通过组件化方式展示。以下是具体实现方法: 安装依赖(可选) 如需更便捷的日期…

css制作日历

css制作日历

使用CSS Grid布局制作日历 日历的布局适合使用CSS Grid实现,因其天然的行列结构。以下是一个基础日历的HTML和CSS代码: <div class="calendar">…

基于vue实现日历

基于vue实现日历

实现基础日历结构 使用Vue的模板语法构建日历的HTML结构,通常包含星期标题和日期格子。月份切换按钮通过v-on绑定事件。 <template> <div class="ca…

vue实现钉钉日历

vue实现钉钉日历

使用 Vue 实现钉钉日历功能 安装依赖 需要安装 v-calendar 或 fullcalendar-vue 等日历库。以 v-calendar 为例: npm install v-calenda…

react实现日历插件

react实现日历插件

实现日历插件的核心步骤 安装依赖 使用react-datepicker或@mui/x-date-pickers等现成库快速实现日历功能。例如: npm install react-datepicke…