记一次 week 上对应的时间的坑
最近在做统计上的东西,遇到一个关于周(week)对应的时间的起始日期问题,导致汇总的数据不一致
mysql 默认的周的起始日期是 周日 程序 Carbon 对象默认获取周是从周一 开始,但是可以设置,我们没设置起始日期,就出现了统计问题
show variables like '%week%'
default_week_format = 0 代表: 0 代表从周日开始 1 代表 周一开始
如果想要处理数据库,可以执行下面命令,也可以添加到/etc/my.cnf 文件下
set global default_week_format = 1
程序处理方式:
Carbon
对象默认的周计算
public const SUNDAY = 0;
public const MONDAY = 1;
public const TUESDAY = 2;
public const WEDNESDAY = 3;
public const THURSDAY = 4;
public const FRIDAY = 5;
public const SATURDAY = 6;
$date = Carbon::now();
$date->setISODate(2022, 46);
// 注意,此处设置从周日开始,和数据库保持一致,默认是1
$start = $date->copy()->startOfWeek(Carbon::SUNDAY)->toDateString();
// 结束时间设置为 周六
$end = $date->copy()->endOfWeek(Carbon::SATURDAY)->toDateString();
通过这种方式,我们使用程序来修改,保持和数据库一致
数据库因为是分布式部署,修改成本比较高,程序更快捷
本作品采用《CC 协议》,转载必须注明作者和本文链接