MySQL、PHP按周统计数据跨年问题(oW %x%v)
本文字数:291 字 | 阅读时长 ≈ 1 min

MySQL、PHP按周统计数据跨年问题(oW %x%v)

本文字数:291 字 | 阅读时长 ≈ 1 min

数据统计

在研发平台或者系统的时候,我们总是会遇到统计数据的情况。

比如:按自然月、周、日进行统计数据,正常情况下,若我们选择的起始时间不存在跨年的情况,正常使用YW(php)、MySQL中%Y%u(from_unixtime或date_format)进行聚合统计时,是没有任何问题存在。

但如果选择的时间区间存在跨年的情况,那么在计算一年最后一周、下一年的第一周是会存在问题。
比如:2018-12-31是周一,php的处理方式

echo date('YW', strtotime('2018-12-31'));// 输出 201801

因为Y对应的年还是2018年,但W对应的周却是2019年的第一周

同样在MySQL中使用%Y%u格式化时间的时候,跨年也会存在相同的问题。

针对以上的问题,使用对应的格式化方法即可满足要求。

php使用oW格式,o对应ISO-8601标准下的年份数字,即格式化2018-12-31会返回201901。

MySQL使用%x%v格式,x、v对应ISO-8601标准下的年份和周,返回结果同上。

Jan 03, 2020
Jan 02, 2020
Dec 30, 2019
Dec 30, 2019
Nov 18, 2019