فاطمه جعفریان
2 سال پیش توسط فاطمه جعفریان مطرح شد
6 پاسخ

ذخیره تایم شمسی بصورت میلادی در دیتابیس

سلام وقتتون بخیر. من دارم با استفاده از ‌ php خام و تقویم باباخانی مقدار تاریخ تولد رو بصورت شمسی از کاربر میگیرم. چطور میتونم اون تاریخ رو بصورت میلادی در دیتابیس ذخیره کنم؟


ثبت پرسش جدید
احسان داوری
تخصص : برنامه نویس
@ehsndvr 2 سال پیش آپدیت شد
0

سلام
کد نمونه برای تبدیل شمسی به میلادی :

<?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

موفق باشید.


b.nik
تخصص : جوجه برنامه نويس c و وردپرس
@b.nik 2 سال پیش مطرح شد
1

@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';

علی طباطبایی نظری
تخصص : دانشجو نرم افزار
@alitabatabaee20 2 سال پیش مطرح شد
0

از کتابخانه jdf میتونید استفاده کنید


احسان داوری
تخصص : برنامه نویس
@ehsndvr 2 سال پیش مطرح شد
0

@spaceman سلام
زمان هم میشد در نظر گرفت، خیلی ممنون از شما بابت دقتتون 🌹🌹🌹


فاطمه جعفریان
تخصص : توسعه وب
@fatemeh.jafarian96 2 سال پیش مطرح شد
فاطمه جعفریان
تخصص : توسعه وب
@fatemeh.jafarian96 2 سال پیش مطرح شد

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام