if (!function_exists('jdate')) { function jdate($format, $timestamp = null) { if (empty($timestamp)) $timestamp = time(); if (!is_numeric($timestamp)) { $timestamp = strtotime($timestamp); } // تبدیل به تهران $date = new DateTime('@' . $timestamp); // UTC $date->setTimezone(new DateTimeZone('Asia/Tehran')); $gy = $date->format('Y'); $gm = $date->format('m'); $gd = $date->format('d'); list($jy, $jm, $jd) = gregorian_to_jalali($gy, $gm, $gd); $replacements = [ 'Y' => $jy, 'y' => substr($jy, -2), 'm' => str_pad($jm, 2, '0', STR_PAD_LEFT), 'n' => $jm, 'd' => str_pad($jd, 2, '0', STR_PAD_LEFT), 'j' => $jd, 'H' => $date->format('H'), 'i' => $date->format('i'), 's' => $date->format('s') ]; $out = $format; foreach ($replacements as $k => $v) $out = str_replace($k, $v, $out); return $out; } // الگوریتم کلاسیک تبدیل میلادی به شمسی function gregorian_to_jalali($gy, $gm, $gd) { $g_d_m = array(0,31,59,90,120,151,181,212,243,273,304,334); $gy = (int)$gy - 1600; $gm = (int)$gm - 1; $gd = (int)$gd - 1; $g_day_no = 365*$gy + (int)(($gy+3)/4)- (int)(($gy+99)/100)+ (int)(($gy+399)/400); $g_day_no += $g_d_m[$gm]+ $gd; if($gm>1 && ((($gy+1600)%4==0 && ($gy+1600)%100!=0)||($gy+1600)%400==0)) $g_day_no++; $j_day_no = $g_day_no-79; $j_np = (int)($j_day_no/12053); $j_day_no = $j_day_no % 12053; $jy = 979+33*$j_np+4*(int)($j_day_no/1461); $j_day_no %=1461; if($j_day_no >= 366){ $jy += (int)(($j_day_no-1)/365); $j_day_no = ($j_day_no-1)%365; } for($i=0;$i<11 && $j_day_no >= ($i<6?31:30);$i++) $j_day_no -=($i<6?31:30); $jm = $i+1; $jd=(int)$j_day_no+1; return [$jy,$jm,$jd]; } }