当前位置:首页 > 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日历实现方案 基于第三方库(如FullCalendar) 安装FullCalendar及其Vue适配器: npm install @fullcalendar/vue @fullcalendar…

vue实现多选日历

vue实现多选日历

Vue 实现多选日历 使用 Vue 实现多选日历功能可以借助现有的日历库或手动构建。以下是两种常见方法: 使用第三方库(如 V-Calendar) 安装 V-Calendar 库: npm ins…

php实现日历

php实现日历

PHP 实现日历的方法 PHP 可以用于生成动态日历,以下是几种常见的实现方式: 使用 date 和 mktime 函数 通过 PHP 内置的日期和时间函数,可以计算月份的天数和起始星期几。…

js日历案例实现

js日历案例实现

实现基础日历功能 日历功能可以通过JavaScript结合HTML和CSS实现,核心是动态生成日期表格。以下代码展示了一个基础的日历生成器: function generateCalendar(ye…

vue 实现日历

vue 实现日历

Vue 日历组件实现 基础日历结构 使用 Vue 的模板和数据绑定功能创建日历骨架。需要定义当前年份、月份,并生成对应的日期数组。 <template> <div class=…

vue日历实现

vue日历实现

Vue 日历实现方案 基础日历组件 安装依赖库(如 v-calendar): npm install v-calendar 引入并注册组件: import VCalendar from 'v-ca…