عمران رستم زاده
6 سال پیش توسط عمران رستم زاده مطرح شد
7 پاسخ

لاراول

سلام وقت همگی بخیر اساتید محترم اگه بخوام یه سری رکورد خاص رو بخونم چی کار باید بکنم اینجوری که یه فیلد تو جدول داشته باشم که تاریخو ثبت کنه بگم نمایش بده از این تاریخ تا این تاریخ رو
برای چاپ فاکتور میخام که هر ماه برای صصدور فاکتور مثلا کاربر وارد کن از این تاریخ تا این تاریخوو نشون بده


ثبت پرسش جدید
عرفان همتی
تخصص : Backend Developer
@erfanhemmati 6 سال پیش مطرح شد
1

@rostamzadeemran93
واسه تبدیل تاریخ شمسی به میلادی ، میتونی از فانکشن زیر استفاده کنی

public 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;
        $gy += (int)(($days - 1) / 365);
        if ($days > 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;
    }

نحوه استفاده هم به این صورت هست که شما باید سال و ماه و روز شمسی به صورت جداگانه به فانکشن پاس بدی ..

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

فخرالدین لنگی
تخصص : برنامه نویس وب، آندروید و سیست...
@fakhraddin 6 سال پیش مطرح شد
0

با سلام و خسته نباشید
شما سه راه مختلف برای اینکار دارید که دوتای اول بهینه هستن و مورد آخری خیر
روش اول :
شما می تونید از یک فیلد timestamp استفاده کنید و تاریخ رو به صورت میلادی توش ثبت کنید و هر وقت خواستید می تونید با عملگرهای کوچکتر یا بزرگنر یا مساوی عملیات مقایسه رو انجام بدید.
روش دوم :
اگه می خوایید تاریخ به صورت شمسی وارد کنید عملیات مشابه روش قبله و اینجا هم یک فیلد timestamp رو تعریف می کنید اما برای ذخیره و بازیابی از یک پکیج بیرونی مثل Verta که کار عملیات تبدیل تاریخ رو به شمسی براتون انجام می ده و مشابه روش قبل می تونید برای مقایسه هم از توابع پکیج استفاده کنید و هم از عملگرهای کوچکتر یا بزرگنر یا مساوی استفاده نمایید.
روش سوم :
که من اصلا توصیه نمی کنم اینکه تاریخ رو به صورت یک رشته (varvhar) ذخیره کنید و خودتون یک تابع برای مقایسه این کار بنویسید


عمران رستم زاده
تخصص : طراح و برنامه نویس
@emranrme 6 سال پیش مطرح شد
0

ممنون ولی مقدوره یکم بیشتر توضیح بدین؟ من تو لاراول تازه کارم زیاد تخصصی ندارم ممنون میشم


عرفان همتی
تخصص : Backend Developer
@erfanhemmati 6 سال پیش مطرح شد
0

1 - به نظر بنده کار درستی نیست که تاریخ شمسی به صورت مستقیم در دیتابیس ذخیره بشه
( درستش اینه که تاریخ میلادی در دیتابیس ذخیره بشه و توسط متد ها و کتابخانه های مختلف به تاریخ شمسی تبدیل بشه )

2 - برای صدور فاکتور از یه تاریخ تا یه تاریخ دیگه باید تاریخ رو صورت شمسی وارد کنید و در Back-End اون رو به تاریخ میلادی تبدیل کنید و طبق اون تاریخ میلادی به دیتابیس کوئری بزنید

3 - نمونه کد صدور فاکتور از یه تاریخ تا یه تاریخ دیگه ( البته کوئریش در لاراول ) :


        $Orders = Order::whereDate('created_at', '>=', $main_date_from)
            ->whereDate('created_at', '<=', $main_date_to)
            ->orderBy('id', 'desc')->get();

سوال دیگه ای بود در خدمتم @rostamzadeemran93


عرفان همتی
تخصص : Backend Developer
@erfanhemmati 6 سال پیش مطرح شد
0

واسه تبدیل تاریخ شمسی به میلادی و بالعکس میتونید از کتابخونه JDF استفاده کنید


عمران رستم زاده
تخصص : طراح و برنامه نویس
@emranrme 6 سال پیش مطرح شد
1

سلام @e.hemmati.79 وقت عالی بخیر
من بخام تاریخ رو از شمسی به میلادی تبدیل کنم برای اینکه تو دیتا بیس ثبت کنم چجوری میتونم؟ من از پکیج morilog/jalali استفاده میکنم برای تقویم فارسی ولی create_at دیتابیس میدونید دیگه timestamps هستش چجوری باید تبدیل کنم ممنون از شما


عرفان همتی
تخصص : Backend Developer
@erfanhemmati 6 سال پیش مطرح شد
1

@rostamzadeemran93
واسه تبدیل تاریخ شمسی به میلادی ، میتونی از فانکشن زیر استفاده کنی

public 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;
        $gy += (int)(($days - 1) / 365);
        if ($days > 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;
    }

نحوه استفاده هم به این صورت هست که شما باید سال و ماه و روز شمسی به صورت جداگانه به فانکشن پاس بدی ..

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

عمران رستم زاده
تخصص : طراح و برنامه نویس
@emranrme 6 سال پیش مطرح شد
0

@e.hemmati.79 خیلی ممنون از شما


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

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