You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 14:54:03