PHP和MySQL获取week值不一致的处理

6 篇文章 0 订阅

应用情景

在处理关于周数据的统计的时候,碰上一个问题:通过MySQL的week函数统计出来的“周数”,比PHP的date(“W”,time())获取的“周数”小1。如“2020-06-18 13:27:01”,MySQL取出来的是24,而PHP取出来的是25,这就导致有一周的数据没有匹配上。

头一次碰上这个问题,于是我特意用win10角落的日历数了一下,发现“2020-06-18 13:27:01”确实在2020年的第25周,那问题就出在MySQL的week函数了。

 

问题所在

仔细一查,发现MySQL的week函数居然还有第2个参数——mode?!

WEEK函数的两个参数:

date是要获取周数的日期。

mode是一个可选参数,用于确定周数计算的逻辑。它允许您指定本周是从星期一还是星期日开始,返回的周数应在0到52之间或0到53之间。

看了这个注释我一开始没看懂,但看了下面这个表:

模式

一周的第一天

范围

0

星期日

0-53

1

星期一

0-53

2

星期日

1-53

3

星期一

1-53

4

星期日

0-53

5

星期一

0-53

6

星期日

1-53

7

星期一

1-53

忽然明白了!

默认情况下,mode参数取0,也就是说,周是从星期日开始算的,再看“2020-06-18 13:27:01”,其实,它所在的这一周是 “2020-06-14”到“2020-06-20”,而不是“2020-06-15”到“2020-06-21”

这就清楚了,是计算一周的第一天不同导致的,那么,只有将其统一,就OK了。

 

解决方案

在MySQL的week函数中加入第二个参数“1”,即 WEEK(created_at,1),再次查看,MySQL和PHP所取的周数就一致了!

至于为什么有0-7这八种模式,有懂的朋友,欢迎留言!谢谢~

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值