php - 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
解决方案
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
变量(并将它们从集合中弹出,以便我在每次都变小的集合上循环更快)。
推荐阅读
- grafana - 如何在 grafana 传奇中添加自定义值?
- angular - MatSort 与字母顺序与 Unicode 顺序不同的语言的排序规则?
- c# - 旋转我正在查看的对象(ARFoundation)
- android - 如何创建一个新的 Android Wear 项目并在设备上运行它?
- android - dex文件过多
- excel - 工作簿中的额外列 - 需要一种删除它们的好方法
- html - 选择选项时显示已选中
- java - 看似随机的 tika 性能问题
- hyperledger-fabric - 创建同意者时出错:无法恢复持久的 raft 数据:无法创建或读取 WAL:无法打开 WAL:fileutil:文件已锁定
- flutter - 为什么我的 Navigator.push,在抽屉里没有上下文?