تبدیل تاریخ شمسی به میلادی php
تبدیل تاریخ شمسی به میلادی به صورت دستی کار وقت گیر و گاهاً مشکلی است زیرا سال کبیسهی خورشیدی با سال کبیسهی میلادی برابر نیست، به همین منظور میتوان از ابزارهای مختلفی استفاده کرد که یکی از آنها نوشتن یک برنامه به زبان PHP است. ابزارهای مختلفی برای تبدیل تاریخ شمسی به میلادی php وجود دارد که استفاده کردن از هرکدام ابزارها روش به خصوص خود را دارد. اما ما در این پست از یک تابع به نام jalali_to_gregorian استفاده میکنیم که این تابع در داخل فایل jdf وجود دارد (توجه کنید که این تابع ورژنهای مختلفی دارد و ما تنها از ورژن سبک نسخه 2.80 استفاده کردهایم). برخی این فایل را کتابخانه مینامند درحالی که تنها یک تابع (function) میباشد و یک تابع فقط از چند دستور مختلف تشکیل شده است. این فایل را میتوانید با جستجو کردن jalali to gregorian jdf در گوگل دانلود نمایید. پس از دانلود کردن فایل میبایست کاربرد هر کدام از پارامترهای تابع را بدانید. در ادامه مطلب تبدیل تاریخ شمسی به میلادی php به توضیح این پارامترها میپردازیم.
function jalali_to_gregorian($jy, $jm, $jd, $mod="") {
$jy += 1595;
$days = -355668 + (365 * $jy) + (((int)($jy / 33)) * 8) + ((int)((($jy % 33) + 3) / 4)) + $jd + (($jm < 7)? ($jm - 1) * 31 : (($jm - 7) * 30) + 186);
$gy = 400 * ((int)($days / 146097));
$days %= 146097;
if ($days > 36524) {
$gy += 100 * ((int)(--$days / 36524));
$days %= 36524;
if ($days >= 365) $days++;
}
$gy += 4 * ((int)($days / 1461));
$days %= 1461;
if ($days > 365) {
$gy += (int)(($days - 1) / 365);
$days = ($days - 1) % 365;
}
$gd = $days + 1;
$sal_a = array(0, 31, (($gy % 4 == 0 and $gy % 100 != 0) or ($gy % 400 == 0))?29:28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
for ($gm = 0; $gm < 13 and $gd > $sal_a[$gm]; $gm++) $gd -= $sal_a[$gm];
return ($mod == "")? array($gy, $gm, $gd) : $gy.$mod.$gm.$mod.$gd;
}
برای تبدیل کردن تاریخ شمسی به میلادی میبایست سه مقدار را وارد برنامه کنیم تا پاسخ بگیریم. این سه مقدار شامل سال، ماه و روز میباشد. این سه پارامتر باید به صورت دستی وارد شوند تا پس از انجام دادن برخی عملیات، تبدیل به تاریخ میلادی گردد. سه پارامتری که در برنامه وجود دارند عبارتند از:
- jy$: اشاره به سال شمسی دارد. این تاریخ باید به صورت کامل وارد شود.
- jm$: اشاره به ماه شمسی دارد که میتواند رقمی بین 1 تا 12 باشد.
- jd$: اشاره به روز شمسی دارد که میتواند رقمی بین 1 تا 31 باشد.
مورد چهارم که با نام mod$ نوشته شده است اشاره به نحوه نمایش تاریخ دارد. این پارامتر تعیین میکند تا تاریخ با استفاده از چه کاراکتری از هم جدا شود. میتوان از کارکتر / یا - برای جدا کردن ارقام سال، ماه و روز استفاده کرد. حتی میتوانید یک فاصله بگذارید اما باید دقت کنید که این پارامتر خالی نباشد. در ادامه یک مثال برای این پارامتر خواهیم زد.