除了 httpwebwitch 提到的限制之外,PHP 的 gregoriantojd() 和 jdtogregorian() 函式並未考慮到「天文」計算系統 — 也就是使用公元 0 年,而不是像基督教的公元系統那樣,從公元前 1 年直接跳到公元 1 年。
這些函式可以用來包裝 PHP 內建函式,以返回符合 ISO 8601 標準的日期。
<?php
function ISO8601toJD($ceDate) {
list($day, $month, $year) = array_map('strrev',explode('-', strrev($ceDate), 3));
if ($year <= 0) $year--;
return gregoriantojd($month, $day, $year);
}
function JDtoISO8601($JD) {
if ($JD <= 1721425) $JD += 365;
list($month, $day, $year) = explode('/', jdtogregorian($JD));
return sprintf('%+05d-%02d-%02d', $year, $month, $day);
}
?>