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

PHP 萬年曆:西曆/農曆/干支/節氣/節日整合顯示 (1901-2020)

     編輯:PHP 綜合知識

經典 PHP 萬年曆程式,單一檔案實現陽曆 (公曆) 與陰曆 (農曆) 雙曆顯示,包含干支紀年、生肖、農曆月份/日期、星期、節氣節日標示,支援 1901-2020 年範圍查詢與翻頁導航。

核心資料結構

  • $everymonth[0..120][1..13]:預計算 120 個農曆年 (1901-2020) 每月天數 (29/30)、閏月標記、干支索引。
  • $mten、$mtwelve:十天干、十二地支 (含生肖) 陣列。
  • $mmonth、$mday:農曆月份名 (正、二...十二、閏)、日期名 (初一、初二...三十)。

演算法流程

  1. 以 1900-12-21 (冬至) 為基準日 (農曆甲子年十一月初一,星期五),計算目標年月首日距基準日總天數 ($total)。
  2. 累加農曆月天數 ($mtotal) 直到超過 $total,定位對應農曆年月日 ($j 年索引、$i 月索引、$md 日)。
  3. 依陽曆月份天數與星期生成 HTML 表格,同步遞增農曆日期、處理閏月跨年。

功能特色

  • 雙曆對照表格:陽曆大數字、農曆小字 (紅/綠/黑色區分週日/週六/平日)。
  • 年份/月份下拉選單快速跳轉 (POST 表單提交)。
  • 上/下月導航連結 (GET 參數 year、month)。
  • 顯示年干支 (如「甲子年 鼠年」);跨農曆年月份雙行標示。
  • 純 PHP 邏輯,無資料庫、無外部依賴,部署即用。

代碼結構概覽

<?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>

現代化改造建議

  1. 資料外部化:將 $everymonth 移至 JSON/資料庫,便於擴充年份範圍 (如 1900-2100)。
  2. 採用成熟庫:laravel-chinese-calendar、overtrue/laravel-festival、php-solar-lunar 等提供精準農曆/節氣/節日計算,含陰曆修正 (如 2033 年閏月爭議)。
  3. 前後端分離:後端 API 回傳 JSON (陽曆日期、農曆資訊、節假日),前端 Vue/React 渲染互動式日曆組件。
  4. 加入節氣計算:依太陽黃經精確計算 24 節氣 (現行代碼僅含農曆日期)。
  5. 國際化 (i18n):支援多語系月份/星期/節日名稱。

此經典代碼展示了「查表法」實現農曆轉換的巧思,適合學習曆法演算與 PHP 陣列操作;生產環境建議採用持續維護的專業庫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved