首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 簡易日歷組件實現:閏年判斷、月曆渲染、當前日期高亮

     編輯:PHP 綜合知識

核心功能

  • 閏年判斷邏輯
  • 月份天數動態計算(含 2 月閏年調整)
  • 表格式月曆渲染(HTML Table)
  • 星期對齊、當前月日期藍色、標題紅色
  • 自動獲取當前年月

完整代碼 calendar.php

<?php
/*******************************
 * 閏年判斷函數
 *******************************/
function leap_year($year) {
    return ($year % 4 == 0);  // 簡化規則,嚴格應加 100/400 年規則
}

/*******************************
 * 初始化月份數據
 *******************************/
function setup() {
    global $mon_num, $mon_name;
    $mon_num  = array(31,30,31,30,31,30,31,31,30,31,30,31);
    $mon_name = array("一","二","三","四","五","六","七","八","九","十","十一","十二");
    
    global $firstday;
    if (leap_year($firstday['year'])) {
        $mon_num[1] = 29;  // 閏年 2 月 29 天
    } else {
        $mon_num[1] = 28;
    }
}

/*******************************
 * 渲染單元格
 *******************************/
function showline($content, $color) {
    echo "<TD WIDTH=60 HEIGHT=25><FONT COLOR=$color>$content</FONT></TD>";
}
?>
<html>
<head>
<title>社區日歷</title>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
</head>
<body>
<?php
// 獲取當前年月第一天信息
$firstday = getdate(mktime(0,0,0, date("m"), 1, date("Y")));
setup();

// 表頭
echo "<CENTER><TABLE BORDER=2 CELLSPACING=4>";
echo "<TH COLSPAN=7 HEIGHT=50><FONT COLOR=red SIZE=3>";
echo "{$firstday['year']}年 &nbsp;" . $mon_name[$firstday['mon']-1] . "月&nbsp;月曆";
echo "</FONT></TH>";

// 星期標題
$weekDay = array("日","一","二","三","四","五","六");
echo "<TR ALIGN=center VALIGN=center>";
for ($i = 0; $i < 7; $i++) showline($weekDay[$i], "red");
echo "</TR>";

// 日期填充
$toweek = $firstday['wday'];           // 本月 1 號是星期幾 (0-6)
$lastday = $mon_num[$firstday['mon']-1]; // 本月總天數
$day_count = 1;
$up_to_firstday = 1;

$weeks = ceil(($lastday + $toweek) / 7);
for ($row = 0; $row < $weeks; $row++) {
    echo "<TR ALIGN=center VALIGN=center>";
    for ($col = 1; $col <= 7; $col++) {
        if ($up_to_firstday <= $toweek || $day_count > $lastday) {
            echo "<TD>&nbsp;</TD>";
            $up_to_firstday++;
        } else {
            showline($day_count, "blue");
            $day_count++;
        }
    }
    echo "</TR>";
}

echo "</TABLE></CENTER>";
?>
</body>
</html>

關鍵算法解析

變量含義計算
$toweek月首星期偏移getdate()['wday'] (0=周日)
$lastday月總天數$mon_num[$mon-1] (閏年已調整)
$weeks需渲染週數ceil(($lastday + $toweek)/7)
$up_to_firstday偏移計數器從 1 遞增至 $toweek

擴展方向

  • 加入農曆/節氣顯示
  • 支持年月切換導航(GET 參數)
  • 事件標記(點擊彈窗編輯)
  • 響應式 CSS 適配移動端
  • 嚴格閏年算法:($y%400==0) || ($y%4==0 && $y%100!=0)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved