經典 PHP 萬年曆程式,單一檔案實現陽曆 (公曆) 與陰曆 (農曆) 雙曆顯示,包含干支紀年、生肖、農曆月份/日期、星期、節氣節日標示,支援 1901-2020 年範圍查詢與翻頁導航。
$everymonth[0..120][1..13]:預計算 120 個農曆年 (1901-2020) 每月天數 (29/30)、閏月標記、干支索引。$mten、$mtwelve:十天干、十二地支 (含生肖) 陣列。$mmonth、$mday:農曆月份名 (正、二...十二、閏)、日期名 (初一、初二...三十)。$total)。$mtotal) 直到超過 $total,定位對應農曆年月日 ($j 年索引、$i 月索引、$md 日)。year、month)。<?php
// 1. 設定檔案路徑 (自遞迴呼叫用)
$file = 'https://.../s2m.php';
// 2. 農曆核心資料表 (120 年 x 13 月) ...
$everymonth = [ ... ];
// 3. 干支、生肖、月名、日名陣列 ...
$mten = [...]; $mtwelve = [...]; $mmonth = [...]; $mday = [...];
// 4. 參數接收與預設值 (當日)
$year = $_GET['year'] ?? date('Y');
$month = $_GET['month'] ?? date('n');
// 5. 陽曆總天數計算 (含閏年)
$total = 11; // 1900-12-21 起算
for ($y=1901; $y<$year; $y++) { $total += 365 + ($y%4==0); }
$monthDays = [31,28,31,30,31,30,31,31,30,31,30,31];
for ($m=1; $m<$month; $m++) $total += $monthDays[$m-1];
if ($year%4==0 && $month>2) $total++;
$week = ($total + 5) % 7; // 5 = 1900-12-21 星期五
// 6. 農曆定位 (累加 $everymonth[$j][$i] 找 $j,$i,$md) ...
// 7. 輸出 HTML: 表頭、干支年、表格雙曆、空行補齊、導航、查詢表單
?>
<html>...</html>
$everymonth 移至 JSON/資料庫,便於擴充年份範圍 (如 1900-2100)。laravel-chinese-calendar、overtrue/laravel-festival、php-solar-lunar 等提供精準農曆/節氣/節日計算,含陰曆修正 (如 2033 年閏月爭議)。此經典代碼展示了「查表法」實現農曆轉換的巧思,適合學習曆法演算與 PHP 陣列操作;生產環境建議採用持續維護的專業庫。