我想使用php将hijri日期转换为格里高利日期,反之亦然。我正在尝试这段代码
<?php
class HijriCalendar
{
function GregorianToHijri($time = null)
{
if ($time === null) $time = time();
$m = date('m', $time);
$d = date('d', $time);
$y = date('Y', $time);
return HijriCalendar::JDToHijri(
cal_to_jd(CAL_GREGORIAN, $m, $d, $y));
}
function HijriToGregorian($time = null)
{
if ($time === null) $time = time();
$m = date('m', $time);
$d = date('d', $time);
$y = date('Y', $time);
return jdtogregorian(HijriCalendar::HijriToJD($m, $d, $y));
}
# Julian Day Count To Hijri
function JDToHijri($jd)
{
$jd = $jd - 1948440 + 10632;
$n = (int)(($jd - 1) / 10631);
$jd = $jd - 10631 * $n + 354;
$j = ((int)((10985 - $jd) / 5316)) *
((int)(50 * $jd / 17719)) +
((int)($jd / 5670)) *
((int)(43 * $jd / 15238));
$jd = $jd - ((int)((30 - $j) / 15)) *
((int)((17719 * $j) / 50)) -
((int)($j / 16)) *
((int)((15238 * $j) / 43)) + 29;
$m = (int)(24 * $jd / 709);
$d = $jd - (int)(709 * $m / 24);
$y = 30*$n + $j - 30;
return array($m, $d, $y);
}
# Hijri To Julian Day Count
function HijriToJD($m, $d, $y)
{
return (int)((11 * $y + 3) / 30) +
354 * $y + 30 * $m -
(int)(($m - 1) / 2) + $d + 1948440 - 385;
}
};
$date=time('1439-05-27');
$hijri = HijriCalendar::HijriToGregorian(time($date));
print_r($hijri)
?>
但是这会将错误的hijri日期返回到格里高利日期,但是格里高利日期到日期会返回正确的日期 的输入 但
“1439年5月27日
输出
2579年9月8日
但我预计日期是2018-03-15如何解决这个问题?我想转换日期反之亦然
答案 0 :(得分:0)
问题在于传递带前导零的值。
$m = date('m', $time);
$d = date('d', $time);
$y = date('Y', $time);
更改如下
$m = date('n', $time);
$d = date('j', $time);
$y = date('Y', $time);
答案 1 :(得分:0)
在课后用:
$j=HijriCalendar::HijritoJD(5,27,1439);
$g=jdtogregorian($j);
print_r($g);
这会将Hijri日期转换为Julianday。之后,将Julianday转换为公历。
您还可以使用HijriDateLib。有据可查。