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
相关产品推荐
相关产品推荐

