آموزش تبدیل تاریخ شمسی به میلادی در PHP

همان طور که می دانید تقویم شمسی از تعداد حرکات زمین به دور خورشید تبعیت می کند اما تقویم میلادی قوانین خاص خودش را دارد و ممکن است کار با تقویم میلادی برای کاربران و توسعه دهندگان وب سایت سخت باشد. به همین دلیل همیشه یکی از مشکلات افراد فنی در حوزه برنامه نویسی با PHP تبدیل تاریخ است که ما در این راهنما سعی کرده ایم به آن بپردازیم. بنابراین برای تغییر تقویم در PHP و تبدیل تاریخ شمسی به میلادی در PHP کافیست چند دقیقه از زمان خود را صرف مطالعه مراحل زیر کنید.
پارامترهای تبدیل تاریخ شمسی به میلادی در زبان PHP
- پارامتر j_y نمایشگر سال هجری شمسی با 4 رقم است.
- پارامتر j_m در دستورات نشانگر ماه های سال هجری شمسی می باشد.
- از پارامتر j_d برای نشادن دادن روزهای سال هجری شمسی استفاده می شود.
- پارامتر mod یک پارامتر اختیاری برای نحوه نمایش فاصله دار اعداد به شکل Text-String می باشد.
مراحل تبدیل تاریخ شمسی به میلادی در PHP
هزاران روش برای تبدیل تاریخ شمسی به میلادی و یا برعکس وجود دارد. اما همان طور که در برخی از منابع رسمی در زبان PHP آمده است با وارد کردن کد زیر می توانید به راحتی این کار را انجام دهید. تنها کاری که باید به صورت پیش نیاز انجام دهید این است که ابتدا باید افزونه `php-intl` را نصب کرده و فعال کنید. سپس می توانید با استفاده از تابع `intlcal_from_date_time` کد زیر را وارد کنید و منتظر اتمام عملیات بمانید:php
function shamsi_to_miladi($year, $month, $day)
{
$timestamp = jalali_to_gregorian($year, $month, $day);
$date = date('Y-m-d', $timestamp);
return $date;
}
function jalali_to_gregorian($jy, $jm, $jd)
{
$gy = ($jy <= 979) ? 621: 1600;
$jy -= ($jy <= 979) ? 0 : 979;
$days = (365 * $jy) + (((int)($jy / 33) * 8) + (int)((($jy % 33) + 3) / 4)) + 78 + $jd + ( ($jm < 7) ? ($jm - 1) * 31 : (($jm - 7) * 30) + 186);
$gy += 400 * (int)($days / 146097);
$days %= 146097;
$leap = 1;
if ($days > 36524) {
$days--;
$gy += 100 * (int)($days / 36524);
$days %= 36524;
if ($days >= 365) {
$days++;
} else {
$leap = 0;
}
}
$gy += 4 * (int)($days / 1461);
$days %= 1461;
$gy += (int)(($days - 1) / 365);
if ($days > 365) {
$days = ($days - 1) % 365;
} else {
$leap = 0;
}
$gd = $days + 1;
foreach (array(0, 31, (($leap) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30) as $gm => $v) {
if ($gd <= $v) {
break
}
$gd -= $v;
}
return mktime(0, 0, 0, $gm + 1, $gd, $gy);
}
// Convert solar date 01/01/1400 to Gregorian date
$shamsi_date = '1400-01-01';
list($year, $month, $day) = explode('-', $shamsi_date);
$miladi_date = shamsi_to_miladi($year, $month, $day);
echo $miladi_date;

نکته مهم! در بسیاری از آموزش های تبدیل های تاریخی، به جای تقویم شمسی از عبارت تقویم جلالی استفاده شده است که در واقع یک مفهوم را می رسانند.