Carbon生成年度月份起止时间
用于按月份统计数据,适用于日期类型字段的区间查询。
/** * 获取各个月份起止时间. * * @param number $number 获取月份数,留空默认为当前月份 * @param number $moreNumber 额外月份(大于当前月份) * * 返回值示例: array:3 [▼ 0 => array:3 [▼ "name" => "1月" "start" => "2022-01-01" "end" => "2022-01-31" ] 1 => array:3 [▼ "name" => "2月" "start" => "2022-02-01" "end" => "2022-02-28" ] 2 => array:3 [▼ "name" => "3月" "start" => "2022-03-01" "end" => "2022-03-31" ] ] */ function getYearMonthRange($number = 0, $moreNumber = 0) { $result = []; if (!$number) { //本年截止到当前月 $number = date('n'); for ($i = 0; $i < $number; ++$i) { $result[] = [ 'name' => Carbon::now()->startOfYear()->addMonth($i)->format('n') . '月', 'start' => Carbon::now()->startOfYear()->addMonth($i)->toDateString(), 'end' => Carbon::now()->startOfYear()->addMonth($i)->endOfMonth()->toDateString(), ]; } } else { //从当前月份往前推 $number 个月, 有可能跨年 for ($i = 0; $i < $number; ++$i) { $result[] = [ 'name' => Carbon::now()->addMonth(-$i)->format('n') . '月', 'start' => Carbon::now()->addMonth(-$i)->startOfMonth()->toDateString(), 'end' => Carbon::now()->addMonth(-$i)->endOfMonth()->toDateString(), ]; } $result = array_reverse($result); } if ($moreNumber) { for ($i = 1; $i < $moreNumber + 1; ++$i) { $result[] = [ 'name' => Carbon::now()->addMonth($i)->format('n') . '月', 'start' => Carbon::now()->addMonth($i)->startOfMonth()->toDateString(), 'end' => Carbon::now()->addMonth($i)->endOfMonth()->toDateString(), ]; } } return $result; }
Categories: 编程