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

