PHP Calendar 函數完整指南:儒略日曆轉換
簡介
Calendar 擴展提供不同曆法格式間的轉換功能,核心基於 Julian Day Count (儒略日計數) — 從公元前 4713 年 1 月 1 日起算的連續日數。轉換流程:來源曆法 → Julian Day Count → 目標曆法。注意:Julian Day Count ≠ Julian Calendar (儒略曆)。
Windows 版 PHP 內建;Linux 需編譯時加入 --enable-calendar。
核心轉換函數
| 函數 | 說明 |
cal_to_jd() | 指定曆法日期 → Julian Day Count |
cal_from_jd() | Julian Day Count → 指定曆法日期 |
cal_days_in_month() | 指定年份/曆法的月份天數 |
cal_info() | 取得指定曆法資訊 |
支援曆法常數
CAL_GREGORIAN — 格里高利曆 (現行國際標準)
CAL_JULIAN — 儒略曆
CAL_JEWISH — 猶太曆
CAL_FRENCH — 法國共和曆
各曆法專用轉換函數
| 函數 | 說明 |
gregoriantojd() / jdtogregorian() | 格里高利曆 ↔ Julian Day Count |
juliantojd() / jdtojulian() | 儒略曆 ↔ Julian Day Count |
jewishtojd() / jdtojewish() | 猶太曆 ↔ Julian Day Count |
frenchtojd() / jdtofrench() | 法國共和曆 ↔ Julian Day Count |
unixtojd() / jdtounix() | Unix 時間戳 ↔ Julian Day Count |
實用工具函數
| 函數 | 說明 |
jddayofweek() | 取得 Julian Day Count 對應的星期幾 (數字/縮寫/全名) |
jdmonthname() | 取得月份名稱 (依曆法與模式) |
easter_date() | 取得指定年份復活節午夜的 Unix 時間戳 |
easter_days() | 取得指定年份復活節與 3 月 21 日的天數差 |
預定義常數
- 曆法類型:
CAL_GREGORIAN, CAL_JULIAN, CAL_JEWISH, CAL_FRENCH, CAL_NUM_CALS
- 星期顯示模式:
CAL_DOW_DAYNO, CAL_DOW_SHORT, CAL_DOW_LONG
- 月份顯示模式:
CAL_MONTH_GREGORIAN_SHORT, CAL_MONTH_GREGORIAN_LONG, CAL_MONTH_JULIAN_SHORT, CAL_MONTH_JULIAN_LONG, CAL_MONTH_JEWISH, CAL_MONTH_FRENCH
- 復活節計算模式:
CAL_EASTER_DEFAULT, CAL_EASTER_ROMAN, CAL_EASTER_ALWAYS_GREGORIAN, CAL_EASTER_ALWAYS_JULIAN
- 猶太曆顯示選項:
CAL_JEWISH_ADD_ALAFIM_GERESH, CAL_JEWISH_ADD_ALAFIM, CAL_JEWISH_ADD_GERESHAYIM
實用範例
1. 格里高利曆轉 Julian Day Count
<?php
$jd = gregoriantojd(1, 15, 2024); // 月, 日, 年
echo "Julian Day Count: $jd\n"; // 2460310
?>
2. Julian Day Count 轉猶太曆
<?php
$jd = gregoriantojd(1, 15, 2024);
echo jdtojewish($jd, true, CAL_JEWISH_ADD_GERESHAYIM);
// 輸出: 5 Tevet 5784
?>
3. 取得某月天數 (格里高利曆)
<?php
echo cal_days_in_month(CAL_GREGORIAN, 2, 2024); // 29 (閏年)
?>
4. 計算復活節日期
<?php
$year = 2024;
$ts = easter_date($year);
echo date('Y-m-d', $ts); // 2024-03-31
?>
5. 顯示 Julian Day Count 的星期與月份
<?php
$jd = gregoriantojd(1, 15, 2024);
echo jddayofweek($jd, CAL_DOW_LONG) . "\n"; // Monday
echo jdmonthname($jd, CAL_MONTH_GREGORIAN_LONG) . "\n"; // January
?>
應用場景
- 歷史日期研究、天文計算需使用 Julian Day Count 進行跨曆法運算。
- 多語系/多文化系統需支援猶太曆、伊斯蘭曆 (需額外庫) 等非格里高利曆。
- 宗教節日計算 (復活節、猶太節慶)。