37048-vm/includes/jdf.php
2025-12-04 21:21:10 +00:00

24 lines
998 B
PHP

<?php
// Jalali (Shamsi) to Gregorian and vice-versa converter in PHP
// Original source: https://github.com/moradin/Jalali/blob/master/jdf.php
// Simplified for this project.
function gregorian_to_jalali($gy, $gm, $gd, $mod='') {
$g_d_m = array(0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334);
$jy = ($gy <= 1600) ? 0 : 979;
$gy -= ($gy <= 1600) ? 621 : 1600;
$gy2 = ($gm > 2) ? ($gy + 1) : $gy;
$days = (365 * $gy) + ((int)(($gy2 + 3) / 4)) - ((int)(($gy2 + 99) / 100)) + ((int)(($gy2 + 399) / 400)) - 80 + $gd + $g_d_m[$gm - 1];
$jy += 33 * ((int)($days / 12053));
$days %= 12053;
$jy += 4 * ((int)($days / 1461));
$days %= 1461;
$jy += (int)(($days - 1) / 365);
if ($days > 365) $days = ($days - 1) % 365;
$jm = ($days < 186) ? 1 + (int)($days / 31) : 7 + (int)(($days - 186) / 30);
$jd = 1 + (($days < 186) ? ($days % 31) : (($days - 186) % 30));
return ($mod == '') ? array($jy, $jm, $jd) : $jy . $mod . $jm . $mod . $jd;
}
?>