سلام
چطوری میتونیم تو مثلا نموداری که بدست میاریم تاریخ ها رو به صورت شمسی محاسبه کنیم ؟
یعنی فرض کنید میخوایم فروش ماه های بهمن و اسفند و فروردین رو محاسبه کنیم به تفکیک ماه . هر ماه چقدر فروش رفته چطور از طریق created_at محاسبه کنیم دقیقا مثلا در بهمن چقدر فروش رفته یا اسفند؟
@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
],
یکم کثیفه ولی امیدوارم کمکتون کنه :) :)
@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,
];
}
سلام دوست عزیز
شما ابتدا باید با استفاده از دستور زیر ماه ها رو از داخل دیتا بیس و از فیلدی که تاریخ سفارش ثبت شده استخراج کنید.
select monthname('field name') as month ...
این دستور ماه ها رو بر می گردونه که در ادامش باید بقیه دستورات رو مثل اسم جدول و ... رو وارد کنید.
بعد با استفاده از پکیج morilog/jalali بیاید این اطلاعات رو به تاریخ شمسی تبدیل کنید و بعدش هم اون رو با استفاده از charst.js نمایش بدید.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟