当前位置:首页 > PHP

php 实现日历

2026-01-29 18:51:34PHP

使用 PHP 实现日历

基础日历实现

PHP 可以通过日期函数和循环结构实现一个简单的日历。以下是一个基础示例:

<?php
function generateCalendar($year, $month) {
    $firstDay = mktime(0, 0, 0, $month, 1, $year);
    $daysInMonth = date("t", $firstDay);
    $dayOfWeek = date("w", $firstDay);

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

    echo "<tr>";
    for ($i = 0; $i < $dayOfWeek; $i++) {
        echo "<td></td>";
    }

    for ($day = 1; $day <= $daysInMonth; $day++) {
        if (($day + $dayOfWeek - 1) % 7 == 0 && $day != 1) {
            echo "</tr><tr>";
        }
        echo "<td>$day</td>";
    }

    echo "</tr></table>";
}

generateCalendar(2023, 11);
?>

带样式的日历

可以添加 CSS 样式使日历更美观:

<style>
.calendar {
    font-family: Arial, sans-serif;
    border-collapse: collapse;
    width: 300px;
}
.calendar th {
    background-color: #f2f2f2;
    text-align: center;
    padding: 8px;
}
.calendar td {
    border: 1px solid #ddd;
    text-align: center;
    padding: 8px;
}
.calendar td:hover {
    background-color: #f5f5f5;
}
</style>

可导航的日历

添加月份导航功能:

<?php
$currentMonth = isset($_GET['month']) ? $_GET['month'] : date('n');
$currentYear = isset($_GET['year']) ? $_GET['year'] : date('Y');

function getNextMonth($month, $year) {
    if ($month == 12) {
        return [1, $year + 1];
    }
    return [$month + 1, $year];
}

function getPrevMonth($month, $year) {
    if ($month == 1) {
        return [12, $year - 1];
    }
    return [$month - 1, $year];
}

list($prevMonth, $prevYear) = getPrevMonth($currentMonth, $currentYear);
list($nextMonth, $nextYear) = getNextMonth($currentMonth, $currentYear);
?>

<a href="?month=<?= $prevMonth ?>&year=<?= $prevYear ?>">Previous</a>
<span><?= date('F Y', mktime(0, 0, 0, $currentMonth, 1, $currentYear)) ?></span>
<a href="?month=<?= $nextMonth ?>&year=<?= $nextYear ?>">Next</a>

<?php generateCalendar($currentYear, $currentMonth); ?>

带事件的日历

可以扩展日历以显示事件:

$events = [
    '2023-11-15' => 'Team Meeting',
    '2023-11-20' => 'Project Deadline'
];

function generateCalendarWithEvents($year, $month, $events) {
    // 前面的日历生成代码...

    for ($day = 1; $day <= $daysInMonth; $day++) {
        $date = sprintf("%04d-%02d-%02d", $year, $month, $day);
        $event = isset($events[$date]) ? $events[$date] : '';

        if (($day + $dayOfWeek - 1) % 7 == 0 && $day != 1) {
            echo "</tr><tr>";
        }
        echo "<td>$day<br><small>$event</small></td>";
    }

    // 后面的日历生成代码...
}

使用 DateTime 类

现代 PHP 推荐使用 DateTime 类:

php 实现日历

function generateCalendarWithDateTime($year, $month) {
    $date = new DateTime("$year-$month-01");
    $daysInMonth = $date->format('t');
    $firstDayOfWeek = $date->format('w');

    // 其余日历生成逻辑类似
}

这些方法展示了如何使用 PHP 创建各种功能的日历,从基本显示到添加导航和事件功能。

标签: 日历php
分享给朋友:

相关文章

php实现socket

php实现socket

PHP 实现 Socket 通信 PHP 可以通过 socket 扩展实现网络通信,支持 TCP/UDP 协议。以下是实现 Socket 通信的核心步骤和代码示例。 创建 TCP 服务器 // 创建…

php记住密码怎么实现

php记住密码怎么实现

使用Cookie实现记住密码功能 在PHP中,可以通过设置Cookie来记住用户的登录状态。以下是一个简单的实现方式: // 用户登录验证成功后 if ($login_success) {…

php实现登录

php实现登录

PHP 登录功能实现 数据库连接与用户表创建 创建一个数据库连接文件 db.php,用于管理数据库连接。MySQL 示例代码如下: <?php $host = 'localhost'; $db…

php验证码的实现

php验证码的实现

PHP 验证码实现方法 使用 GD 库生成基础验证码 创建画布并生成随机字符串作为验证码内容: session_start(); $width = 120; $height = 40; $image…

vue怎么实现日历

vue怎么实现日历

实现基础日历布局 使用Vue的模板语法构建日历的HTML结构,通常采用表格形式展示日期。月份切换通过计算属性动态生成日期数组。 <template> <div class=…

php 实现秒杀

php 实现秒杀

PHP 实现秒杀的关键技术 秒杀系统需要解决高并发、超卖、性能瓶颈等问题。以下是实现秒杀的核心方案: 使用 Redis 预减库存 将商品库存提前加载到 Redis 中,通过原子操作保证库存准确性:…