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

PHP生成起始至截止日期的周一至周日日期区间表格行(附问题代码)

PHP生成指定日期范围内的周一至周日周区间表格行

你的代码存在几个核心问题:

  • 嵌套遍历日期范围会导致无意义的重复匹配,逻辑完全偏离需求
  • 仅单独判断日期是周一/周日,没有将二者关联成一个完整的周区间
  • HTML输出不规范,缺少闭合标签且未使用表格单元格<td>来承载内容

下面是正确的实现方案,会按周生成从起始到截止日期内的周一至周日区间,并输出完整的表格行:

<?php
$begin = new DateTime('2023-01-01');
$end = new DateTime('2023-06-01');

// 调整起始日期到当前周的周一(如果起始日不是周一)
// 若需要包含起始日所在的完整周(哪怕起始日在周一之前),保留这段代码
$weekday = $begin->format('w');
if ($weekday != 1) {
    $begin->modify('last Monday');
}

// 若不需要包含起始日之前的日期,从起始日之后的第一个周一开始,改用这段代码:
// if ($begin->format('w') != 1) {
//     $begin->modify('next Monday');
// }

echo "<tr>";

while ($begin <= $end) {
    // 计算当前周一对应的周日
    $sunday = clone $begin;
    $sunday->modify('+6 days');
    
    // 如果周日超过截止日期,就用截止日期作为区间终点
    if ($sunday > $end) {
        $sunday = clone $end;
    }
    
    // 输出周区间到表格单元格
    echo "<td>" . $begin->format('Y-m-d') . " To " . $sunday->format('Y-m-d') . "</td>";
    
    // 跳到下一个周一
    $begin->modify('+7 days');
}

echo "</tr>";
?>

代码说明:

  • 提供两种起始日期调整逻辑,可根据需求选择是否包含起始日所在的完整周
  • 循环中自动计算每周的周日,若周日超出截止日期则用截止日期作为区间终点
  • 每个周区间用<td>包裹,保证表格结构符合规范
  • 每次循环后自动跳转到下一个周一,直到覆盖所有指定日期范围

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 19:47:33