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

PHP 實現天干地支 (六十甲子) 計算器完整演算法

     編輯:PHP 相關知識

天干地支(簡稱「干支」)是中國傳統紀年、紀月、紀日、紀時系統。本文提供兩種 PHP 演算法實現,可快速計算任意年份對應的干支紀年。

基礎知識:六十甲子循環

  • 十天干:甲、乙、丙、丁、戊、己、庚、辛、壬、癸 (10)
  • 十二地支:子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥 (12)
  • 最小公倍數 60:天干地支兩兩配合,組成 60 個不重複組合(甲子、乙丑 ... 癸亥),稱為一個「甲子」循環。

演算法一:以 1900 年為基準偏移

1900 年為「庚子」年。以 1900 年為基準,計算目標年份與 1900 年的年差,再加上 1900 年在甲子序列中的索引偏移 (36),即可取模得到結果。

<?php
$TGDZ = [
    ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'],      // 天干 0-9
    ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥'] // 地支 0-11
];

$year = 2014;
// 1900 年是庚子,天干索引 6 (庚),地支索引 0 (子)
// 但在陣列中庚索引為 6,子索引為 0
// 為了讓 1900 % 10 = 0 對應庚,1900 % 12 = 0 對應子
// 需要將陣列旋轉,或計算偏移量
// 這裡採用偏移量:1900 年距離甲子年的偏移
$offset = 36; // 經驗值:1900 - 1864 (甲子年) = 36

$index = $year - 1900 + $offset; // 2014 - 1900 + 36 = 150

$tianGan = $TGDZ[0][$index % 10]; // 150 % 10 = 0 -> 甲
$diZhi   = $TGDZ[1][$index % 12]; // 150 % 12 = 6 -> 午

echo "$year 年為農歷[$tianGan$diZhi]年"; // 輸出:2014 年為農歷[甲午]年
?>

演算法二:直接以年份取模 (陣列預先對齊)

將天干、地支陣列預先旋轉,使得 年份 % 10、年份 % 12 直接對應正確索引。以 1900 年 (庚子) 為基準對齊:

  • 天干:庚(6) 對應 1900 % 10 = 0 → 陣列索引 0 放「庚」
  • 地支:子(0) 對應 1900 % 12 = 4? 實際 1900 % 12 = 4,但子索引為 0 → 需調整

經驗證,以下陣列排列可直接用年份取模:

<?php
$TGDZ = [
    ['庚', '辛', '壬', '癸', '甲', '乙', '丙', '丁', '戊', '己'],           // 天干:索引 0=庚 對應年份%10=0
    ['申', '酉', '戌', '亥', '子', '丑', '寅', '卯', '辰', '巳', '午', '未']  // 地支:索引 4=子 對應年份%12=4
];

for ($year = 1900; $year <= 2099; $year++) {
    $tianGan = $TGDZ[0][$year % 10];
    $diZhi   = $TGDZ[1][$year % 12];
    echo "$year 年為農歷[$tianGan$diZhi]年<br>";
}
?>

驗證關鍵年份

年份干支備註
1900庚子基準年
1984甲子甲子循環起始
2000庚辰千禧年
2024甲辰本年
2044甲子下一個甲子年

擴展:月、日、時干支計算

年干支只是起點。完整八字需結合:

  • 月干支:以年干決定月干起點(五虎遁),節氣交接點換月。
  • 日干支:需已知基準日 (如 1900-01-01 為甲戌日) 計算日數差取模 60。
  • 時干支:以日干決定時干起點(五鼠遁),子時 23:00-01:00。

完整實作涉及節氣精確時間、閏月處理、時區換算,建議使用成熟庫(如 laravel-lunar、overtrue/laravel-festival、Python lunarcalendar)。

應用場景

  • 農曆生日/生肖顯示
  • 傳統節日計算 (春節、端午、中秋)
  • 風水、命理、擇日軟體基礎模組
  • 文化創意產品 (日曆、禮品、遊戲)

結語

天干地支計算核心是 模 60 循環。掌握基準年對齊技巧,即可用簡潔代碼實現年份干支查詢。月日時計算複雜度顯著上升,實務開發建議直接引用經過驗證的開源庫,避免邊界條件錯誤。

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