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

PHP根据指定周数获取对应日期遇难题,求正确实现方案

获取指定日期所在周的所有日期

你的问题出在计算逻辑上:原代码里用$selected_date - $week_number days完全错误——周数是一年里的第N周,不是天数,这么减相当于把日期往回推几十天,结果自然混乱。

正确实现方法

方法1:用strtotime快速实现

先找到目标日期所在周的周一,再依次加0到6天,就能得到整周日期:

$selected_date = '2022-08-23';
// 获取该日期所在周的周一(若要周日作为起始,把'Monday'改成'Sunday')
$week_start = strtotime('Monday this week', strtotime($selected_date));

$dates = [];
for ($i = 0; $i < 7; $i++) {
    // 数组索引从1开始,匹配你的预期格式
    $dates[$i+1] = date('Y-m-d', $week_start + $i * 86400);
}

print_r($dates);

运行后会得到你想要的结果:

Array
(
    [1] => 2022-08-22
    [2] => 2022-08-23
    [3] => 2022-08-24
    [4] => 2022-08-25
    [5] => 2022-08-26
    [6] => 2022-08-27
    [7] => 2022-08-28
)

方法2:用DateTime类(更推荐,日期处理更可靠)

DateTime类对跨年月、特殊日期的处理更严谨,不容易出解析错误:

$selected_date = '2022-08-23';
$date = new DateTime($selected_date);
// 设置为该周的周一
$date->modify('Monday this week');

$dates = [];
for ($i = 0; $i < 7; $i++) {
    $dates[$i+1] = $date->format('Y-m-d');
    $date->modify('+1 day');
}

print_r($dates);

这个方法和上面的结果完全一致,适合更复杂的日期场景。

额外注意

  • 原代码里的strtotime(23/08/2022)存在解析风险:斜杠在strtotime中默认按「月/日/年」解析,23/08/2022会被识别为无效日期(23不是合法月份),建议写成'2022-08-23'这种标准格式。
  • 若你的地区以周日作为一周的第一天,只需把代码里的'Monday this week'替换为'Sunday this week'即可。

内容的提问来源于stack exchange,提问作者codingIT

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:18:33