PHP使用date()函数获取星期数值异常:2018年5月月末值错误排查
问题分析:获取每月最后一天星期数返回值错误
嘿,我发现你的问题出在date()函数的参数使用上啦!
你当前的代码:
$endMonth = date('Y-m-t'); $dayPostition = date('w', $endMonth);
这里的核心问题是:date()函数的第二个参数要求传入Unix时间戳,而你传的是字符串格式的日期(比如2018-05-31)。虽然PHP会尝试自动解析这个字符串,但这种解析并不总是可靠的,这就导致2018年5月最后一天的星期数计算错误——实际5月31日是星期四(对应w的返回值4,w规则是0=周日、1=周一……4=周四),但错误的解析让你得到了3。
正确的实现方式
给你几种靠谱的解决办法:
方法一:把日期字符串转成时间戳
用strtotime()将$endMonth转换成时间戳后再传入date():$endMonth = date('Y-m-t'); $dayPosition = date('w', strtotime($endMonth));方法二:直接获取当月最后一天的时间戳
用strtotime()的语义化写法,一步到位:$dayPosition = date('w', strtotime('last day of this month'));方法三:使用DateTime类(更推荐)
DateTime类处理日期时间更健壮,避免字符串解析的坑:$date = new DateTime(); $date->modify('last day of this month'); $dayPosition = $date->format('w');
用以上任意一种方法,2018年5月最后一天的星期数都会正确返回4啦!
内容的提问来源于stack exchange,提问作者Micha
相关产品推荐
相关产品推荐

