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

PHP实现两个日期间按周循环列出选中星期几对应日期

PHP按周循环输出指定星期几日期的修复方案

核心问题说明

原有代码的问题主要有三点:

  • 仅手动输出首周和次周的日期,没有循环遍历到结束日期的逻辑
  • 表单checkbox的value为固定当前周的具体日期,无法适配任意开始日期的场景
  • 接收参数的键名和表单提交的键名不匹配,参数读取错误

第一步:修正前端表单代码

修复了checkbox拼写错误,调整value为星期几标识,适配任意日期范围:

<form action="" method="POST">
<table>
<tr>
    <td style="width:15%;">开始日期</td>
    <td style="width:15%;">
        <input type="text" name="startdate" style="width:95%;height:20px;text-align:center;" placeholder="例:2020-01-01">
    </td>
    <td style="width:15%;">结束日期</td>
    <td style="width:15%;">
        <input type="text" name="enddate" style="width:95%;height:20px;text-align:center;" placeholder="例:2020-12-31">
    </td>
</tr>
<tr>
    <td><input type="checkbox" class="deneme" name="txtSali[]" value="monday"> 周一</td>
    <td><input type="checkbox" class="deneme" name="txtSali[]" value="tuesday"> 周二</td>
    <td><input type="checkbox" class="deneme" name="txtSali[]" value="wednesday"> 周三</td>
    <td><input type="checkbox" class="deneme" name="txtSali[]" value="thursday"> 周四</td>
    <td><input type="checkbox" class="deneme" name="txtSali[]" value="friday"> 周五</td>
    <td><input type="checkbox" class="deneme" name="txtSali[]" value="saturday"> 周六</td>
    <td><input type="checkbox" class="deneme" name="txtSali[]" value="sunday"> 周日</td>
</tr>
<tr>
    <td colspan="7"><button type="submit">生成日期</button></td>
</tr>
</table>
</form>

第二步:修正后端PHP处理逻辑

新增周循环逻辑,增加日期排序保证输出顺序符合要求:

<?php
if (!empty($_POST['startdate']) && !empty($_POST['enddate']) && !empty($_POST['txtSali'])) {
    // 转换开始结束日期为时间戳,可自行加异常校验处理非法日期格式
    $startTimestamp = strtotime($_POST['startdate']);
    $endTimestamp = strtotime($_POST['enddate']);
    $dateList = [];

    // 遍历所有选中的星期几
    foreach ($_POST['txtSali'] as $weekDay) {
        // 计算大于等于开始日期的第一个对应星期几的时间戳
        $currentDate = strtotime("next {$weekDay}", $startTimestamp - 86400);
        // 按周循环直到超过结束日期
        while ($currentDate <= $endTimestamp) {
            $dateList[] = $currentDate;
            $currentDate = strtotime("+1 week", $currentDate);
        }
    }

    // 按日期升序排序,保证输出顺序符合示例要求
    sort($dateList);

    // 输出结果
    foreach ($dateList as $item) {
        echo date("d.m.Y D", $item) . "<br>";
    }
}
?>

效果验证

假设选中周一、周五,开始日期填2020-01-01,结束日期填2020-01-31,输出结果如下:

06.01.2020 Mon
10.01.2020 Fri
13.01.2020 Mon
17.01.2020 Fri
20.01.2020 Mon
24.01.2020 Fri
27.01.2020 Mon
31.01.2020 Fri

内容的提问来源于stack exchange,提问作者Murat özkan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:18:02