درود بر برنامه نویسان عزیز
من برای شمسی سازی در سایتم از تابع
function gregorian_to_jalali($gy,$gm,$gd,$mod=''){ $g_d_m=array(0,31,59,90,120,151,181,212,243,273,30 4,334); if($gy>1600){ $jy=979; $gy-=1600; }else{ $jy=0; $gy-=621; } $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; if($days > 365){ $jy+=(int)(($days-1)/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; }
استفاده میکنم
ورودی تابع به این شکل هست
$gy = 1984; $gm =05; $gd = 26;
خروجی تابع به این شکل هست
1363/3/5
اگر بخام خروجی تابع به این صورت بشه
1363/03/05
باید کدوم پارامترها رو تغییر بدم
با تشکر
سلام
توی اون دو خط آخر قبل از return داره ماه و روز رو محاسبه میکنه. خروجی اونها یک عدد هست برای همین اون صفر قبل عدد رو نداره. این دو خط پایین:
$jm=($days < 186)?1+(int)($days/31):7+(int)(($days-186)/30); $jd=1+(($days < 186)?($days%31):(($days-186)%30));
یه کار خیلی خیلی ساده این هست که بعد از محاسبه، چک کنید که اگر عدد یک رقمی بود قبلش یک صفر اضافه بشه و خروجی به صورت string باشه.
بعضی کلاسهای تبدیل تاریخ هم هست که میتونید برای خروجیشون یک فرمت تعریف کنید که دقیقا با فرمتهای تابع date تعریف میشن.
سلام. البته من خیلی در زمینه php تازه کارم. ولی برای آخرین کارم از jdf استفاده کردم که خودش اینکارو انجام میده و همه چی رو به صورت آماده داره
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)