首页 > 解决方案 > Carbon 将记录分为周和月

问题描述

我有一个记录,我正在获取过去 4 个月的时间戳(created_at、updated_at)数据。接下来,我想将此数据划分为按周和按月(过去 4 周和过去 4 个月。)

我正在尝试的是为每个月手动创建变量,然后编写 if 逻辑以将数据输入每个月。是否有任何功能已经做到了?

    // for student population - Last 4 months data
    $from = Carbon::now()->subMonth(4);

    $to = Carbon::now(); 

    $invoice =invoice::where('instructor_id', '=', $id)
    ->whereBetween('created_at',[$from,$to])->get();

    $week_1=$week_2=$week_3=$week_4=$month_1=$month_2=$month_3=$month_4=[];

    // write if logic and enter data for each week separately

标签: phplaravel

解决方案


function that already does it不,在 Eloquent 或 Carbon 中没有,afaik。

我建议循环浏览 Eloquent Collection。

这里给你一个提示:

$from = Carbon::now()->subMonth(4);
$to = Carbon::now(); 

$invoices = invoice::where('instructor_id', '=', $id)->whereBetween('created_at', [$from, $to])->get();

// ...

$invoicesLastWeek = $invoices->whereBetween('created_at', [
        Carbon::now()->subWeeks(1)->startOfWeek(),
        Carbon::now()->subWeeks(1)->endOfWeek()
    ]);

// ...

$invoicesTwoMonthsAgo = $invoices->whereBetween('created_at', [
    Carbon::now()->subMonths(2)->startOfMonth()),
    Carbon::now()->subMonths(2)->endOfMonth()
]);

// ...

我将为 and 循环和递增参数->subWeeks($i)->->subMonths($i)->并填充所需的变量。

我将首先开始设置每个week变量,以便我可以从集合中弹出该范围内的所有发票(用于性能)。然后对于每个month变量,我会添加weekN + weekN+1 + weekN+2 + weekN+3变量(并将它们从集合中弹出,以便我在每次都变小的集合上循环更快)。


推荐阅读