Mostafa Nazar
4 سال پیش توسط Mostafa Nazar مطرح شد
4 پاسخ

تعداد محصول در ماه شمسی در لاراول

سلام
چطوری میتونیم تو مثلا نموداری که بدست میاریم تاریخ ها رو به صورت شمسی محاسبه کنیم ؟
یعنی فرض کنید میخوایم فروش ماه های بهمن و اسفند و فروردین رو محاسبه کنیم به تفکیک ماه . هر ماه چقدر فروش رفته چطور از طریق created_at محاسبه کنیم دقیقا مثلا در بهمن چقدر فروش رفته یا اسفند؟


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

@mostafa.8722
سلام. وقت بخیر
می‌تونید از chart.js استفاده کنید به راحتی.

labels: [
                    @for($i=12; $i >= 1; $i--)
                        @php
                            $month = $i;
                            // $persian_month = ['فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'];
                            $persian_month = [];
                            $persian_month[0] = "ماه‌های سال";

                            switch ($month) {
                            case 1:
                            $persian_month[1] = "فروردین";
                            break;

                            case 2:
                            $persian_month[2] = "اردیبهشت";
                            break;

                            case 3:
                            $persian_month[3] = "خرداد";
                            break;

                            case 4:
                            $persian_month[4] = "تیر";
                            break;

                            case 5:
                            $persian_month[5] = "مرداد";
                            break;

                            case 6:
                            $persian_month[6] = "شهریور";
                            break;

                            case 7:
                            $persian_month[7] = "مهر";
                            break;

                            case 8:
                            $persian_month[8] = "آبان";
                            break;

                            case 9:
                            $persian_month[9] = "آذر";
                            break;

                            case 10:
                            $persian_month[10] = "دی";
                            break;

                            case 11:
                            $persian_month[11] = "بهمن";
                            break;

                            case 12:
                            $persian_month[12] = "اسفند";
                            break;
                            }
                        @endphp
                        "{{ $persian_month[$i] }}",
                    @endfor
                ],
                    data: [
                        @for($i=12; $i >= 1; $i--)
                        @php
                            $year = jdate(date('Y-m-d'))->getYear();
                            $month = $i;
                            $day = 1;
                            $persian_date = $year . '-' . $month . '-' . $day;

                            $date_count = (new Jalalian($year, $month, $day))->getMonthDays();

                            $first_month = \App\Helpers\Jalali::jalaliToGregorian($year, $month, $day, '-');
                            $end_month =  \App\Helpers\Jalali::jalaliToGregorian($year, $month, $date_count, '-');

                            $view_count = \Illuminate\Support\Facades\DB::table('visits')
                            ->whereDate('created_at', '>=', $first_month)
                            ->whereDate('created_at', '<=', $end_month)
                            ->get()
                            ->count();
                        @endphp
                        {{ $view_count }},
                        @endfor
                    ],

یکم کثیفه ولی امیدوارم کمکتون کنه :) :)


محسن بستان
تخصص : Senior Backend Developer
@mohsenbostan 4 سال پیش مطرح شد
0

@mostafa.8722
روشی که دوست مون گفتند روش خوبیه و همچنین میتونید از کد های زیر هم استفاده کنید! البته این برای تعداد بازدید های سایت هستش که میتونید با دیتای خودتون تعویضش کنید. کاری که باید بکنید خیلی سادست. کافیه که یه Helper بسازید و تابع زیر رو داخلش قرار بدید و بعد میتونی خیلی ساده با زدن views_chart() به دیتای نمودار دسترسی داشته باشید. در نهایت هم این دیتا ها رو در chart.js قرار میدید.


function views_chart()
{
    setlocale(LC_TIME, 'fa');
    \Carbon\Carbon::setLocale('fa');
    $views = \App\View::selectRaw('year(created_at) year, monthname(created_at) month, count(*) count')
        ->groupBy('year', 'month')
        ->orderBy('year', 'desc')
        ->get();

    $labels = $views->map(function ($item) {
        return \Morilog\Jalali\Jalalian::forge(\Carbon\Carbon::parse($item->month))->format('%B %Y');
    });
    $dataset = $views->map(function ($item) {
        return $item->count;
    });

    return [
        "labels" => $labels,
        "dataset" => $dataset,
    ];
}

Ali Abbasi
تخصص : برنامه نویس php
@Ali.Abbasi1381 4 سال پیش مطرح شد
0

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

select monthname('field name') as month ...

این دستور ماه ها رو بر می گردونه که در ادامش باید بقیه دستورات رو مثل اسم جدول و ... رو وارد کنید.
بعد با استفاده از پکیج morilog/jalali بیاید این اطلاعات رو به تاریخ شمسی تبدیل کنید و بعدش هم اون رو با استفاده از charst.js نمایش بدید.


Mostafa Nazar
تخصص : برنامه نویس وب و موبایل
@mostafa.8722 4 سال پیش مطرح شد
0

دوتا جواب خوب بودند ولی @mrerfan.ir بهتر بود


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

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