PHP中strtotime('this monday')返回下周一而非当周周一问题求解
问题原因
PHP 中strtotime()的this [周几]相对时间规则是:如果传入的基准日期已经过了对应周几,会直接返回下一周的对应周几日期,因此周五传入时查询this monday会跳到下周一,不符合取当周周一的需求。
另外你现有代码还有一处需要修正:周参数判断分支里的2021W34是硬编码测试值,实际运行需要替换为用户传入的$weekInput变量,否则周参数永远返回2021年第34周的日期。
修复后代码
$weekInput = $request->input('week'); $weekInput = str_replace("-","", $weekInput); // 先处理基准日期 if ($request->input('week')) { // 替换原硬编码,使用传入的周参数 $baseTs = strtotime($weekInput); } else { $baseTs = time(); } // 直接取基准日期所属周的周一时间戳,逻辑稳定不会跳周 $mondayTs = strtotime('monday this week', $baseTs); // 周几直接在周一基础上偏移天数即可,不需要反复调用strtotime查询周几 $monday = date('Y-m-d', $mondayTs); $tuesday = date('Y-m-d', strtotime('+1 day', $mondayTs)); $wednesday = date('Y-m-d', strtotime('+2 day', $mondayTs)); $thursday = date('Y-m-d', strtotime('+3 day', $mondayTs)); $friday = date('Y-m-d', strtotime('+4 day', $mondayTs));
兼容优化方案
如果你的服务器周起始日默认配置为周日,可能会出现this week计算偏差,可以用不受系统配置影响的偏移写法:
// 计算当前日期是周几(1=周一,7=周日,符合ISO-8601标准) $weekDay = date('N', $baseTs); // 偏移到周一:当前周几减1天就是和周一的差值 $mondayTs = strtotime('-'. ($weekDay - 1) .' days', $baseTs);
内容的提问来源于stack exchange,提问作者Ihtisham Khan
相关产品推荐
相关产品推荐

