سلام وقتتون بخیر. من دارم با استفاده از php خام و تقویم باباخانی مقدار تاریخ تولد رو بصورت شمسی از کاربر میگیرم. چطور میتونم اون تاریخ رو بصورت میلادی در دیتابیس ذخیره کنم؟
سلام
کد نمونه برای تبدیل شمسی به میلادی :
<?php
function jalali_to_gregorian($jy, $jm, $jd, $mod = '')
{
if ($jy > 979) {
$gy = 1600;
$jy -= 979;
} else {
$gy = 621;
}
$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;
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;
foreach (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) as $gm => $v) {
if ($gd <= $v) break;
$gd -= $v;
}
return ($mod == '') ? array($gy, $gm, $gd) : $gy . $mod . $gm . $mod . $gd;
}
function gregorian_to_jalali($gy, $gm, $gd, $mod = '')
{
$g_d_m = array(0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 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;
}
$date = jalali_to_gregorian('1300', '04', '9', '/');
echo $date; // تاریخ بدست آمده به میلادی - year/month/day
داخل کد بالا 2 تابع وجود داره ، یکی برای تبدیل شمسی به میلاد و یکی برای تبدیل میلادی به شمسی.
تابع jalali_to_gregorian
برای تبدیل شمسی به میلاد هستش.
منبع : JDF.SCR.IR
موفق باشید.
@ehsndvr
تکمیل کننده کد آقای داوری
$main_date_from = $this->jalali_to_gregorian($year, $month, $day, '-') . ' ' . '00:00:00';
$main_date_to = $this->jalali_to_gregorian($year1, $month1, $day1, '-') . ' ' . '23:59:59';
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟