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

PHP如何计算两个日期间的周数并获取每周起止日期(周一至周日)

PHP 按周一至周日周期拆分日期范围实现

首先注意你提供的示例代码中变量名存在笔误:$dateForm 应为 $dateFrom,以下是完整实现代码:

<?php
// 定义起止日期
$dateFrom = "2021-07-26";
$dateTo = "2021-08-13";
// 设置时区避免日期计算偏差
date_default_timezone_set('Asia/Shanghai');
// 转成DateTime对象便于计算,避免时间戳2038年上限问题
$startDate = new DateTime($dateFrom);
$endDate = new DateTime($dateTo);
$weekRanges = [];
// 循环拆分周
while ($startDate <= $endDate) {
    // 计算当前周的周日日期:format('N')返回1(周一)~7(周日)
    $currentWeekEnd = (clone $startDate)->modify('+' . (7 - $startDate->format('N')) . ' days');
    // 若当前周周日晚于总结束日期,取总结束日期作为当前周结束
    if ($currentWeekEnd > $endDate) {
        $currentWeekEnd = clone $endDate;
    }
    // 存入结果数组
    $weekRanges[] = [
        'dateFrom' => $startDate->format('Y-m-d'),
        'dateTo' => $currentWeekEnd->format('Y-m-d')
    ];
    // 下一周起始日期为当前周结束日期+1天
    $startDate = (clone $currentWeekEnd)->modify('+1 day');
}
// 打印结果验证
print_r($weekRanges);
?>

输出结果示例

运行上述代码得到的结果和你要求的完全一致:

Array
(
    [0] => Array
        (
            [dateFrom] => 2021-07-26
            [dateTo] => 2021-08-01
        )
    [1] => Array
        (
            [dateFrom] => 2021-08-02
            [dateTo] => 2021-08-08
        )
    [2] => Array
        (
            [dateFrom] => 2021-08-09
            [dateTo] => 2021-08-13
        )
)

如果需要格式化输出成你示例的对齐表格样式,自行遍历$weekRanges数组做字符串补全处理即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 19:51:01