当前位置:首页 > PHP

php实现当月日历

2026-02-16 20:02:07PHP

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>';

更灵活的封装函数

创建一个可重用的日历生成函数:

php实现当月日历

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

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

相关文章

vue实现日历

vue实现日历

Vue 实现日历的基本方法 使用 Vue 实现日历可以通过自定义组件或借助第三方库完成。以下是两种常见实现方式: 自定义日历组件 创建基于 Vue 的日历组件需要处理日期计算和渲染逻辑。核心是生成…

vue实现全年日历

vue实现全年日历

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

vue实现mac日历

vue实现mac日历

Vue 实现 Mac 日历功能 要在 Vue 中实现类似 Mac 日历的功能,可以结合第三方库或自定义组件开发。以下是两种常见方法: 使用 FullCalendar 库 FullCalendar 是…

vue实现滑动日历

vue实现滑动日历

实现滑动日历的基本思路 使用Vue实现滑动日历需要结合触摸事件(touchstart、touchmove、touchend)或第三方库(如hammer.js)处理滑动逻辑,动态计算日期数据并渲染视图。…

用vue实现日历

用vue实现日历

实现基础日历结构 使用Vue构建日历需要先设计基础数据结构。通常需要维护当前年份、月份以及日期数组。可以通过Date对象获取当前月份的天数和起始星期。 data() { return {…

vue实现全年日历功能

vue实现全年日历功能

实现全年日历功能 在Vue中实现全年日历功能,可以通过组合多个月份日历组件或使用第三方库来简化开发。以下是两种常见方法: 使用第三方库(如FullCalendar) 安装FullCalendar…