carbon 时间转化
需求:
1、按周统计给定时间的数据
2、每周第一天从周日开始算起(重点)
实现
- sql语句
SELECT DATE_FORMAT( order_time, '%Y%u' ) weeks, COUNT(*) AS total FROM `orders` WHERE `order_time` BETWEEN '2023-12-31 00:00:00' AND '2024-01-06 23:59:59' GROUP BY weeks
- php 代码 截取时间处理部分
# $item->weeks = 202352 [$year, $week] = str_split($item->weeks, 4); Carbon::setWeekStartsAt(Carbon::SUNDAY); Carbon::setWeekEndsAt(Carbon::SATURDAY); $weekStartDay = Carbon::now()->setISODate($year, $week)->startOfWeek(); $weekEndDay = $startDay->copy()->endOfWeek();
问题
可以看出来我mysql 查询时一周是按这从周一到周日统计的,但是用carbon进行处理的时候是却是周日到周六 当出现临界值的时候 比如2023.12.31-2024.1.6 数据库按周日到周日算 会统计两周结果出来分别是2023-12.25 - 2023.12.31 和 2024.01.01 - 2024.01.06, 实际我按周日进行一周计算只需要 2023.12-31 - 2024.01.06 就可以了, 这个sql该怎么改呢
google 了一下 找到类似文章的解决办法 cloud.tencent.com/developer/articl...
使用了chatgpt-4 让他用YEARWEEK 给我写sql
最终的sql为