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

