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

PHP实现按周拆分指定日期范围并自定义起止日期的方法

按指定起止日期拆分日期范围为周分段的PHP函数实现

需求说明

需要实现一个PHP函数,将给定的日期范围按周拆分,但不使用每周固定的首尾日作为分段强制标准:

  • 第一段以用户指定的起始日期为开始
  • 中间段落为完整的自然周(可自定义周结束日,默认周日)
  • 最后一段以用户指定的结束日期为收尾

比如输入:

$startDate = '2022-08-05';
$endDate = '2022-08-16';

期望得到的分段结果:

  • 2022-08-05 至 2022-08-07(从指定起始日到当周周日)
  • 2022-08-08 至 2022-08-14(完整自然周)
  • 2022-08-15 至 2022-08-16(从下一周起始日到指定结束日)

原函数问题分析

原rangeWeek函数仅返回给定日期所在自然周的固定首尾日(周一至周日),无法适配用户指定的起止日期作为分段边界,因此需要重新实现。

解决方案:自定义分段函数

使用PHP的DateTime类处理日期(比strtotime更稳定可靠),实现按需求拆分的函数:

function splitDateRangeIntoWeeks($startDateStr, $endDateStr, $weekEndDay = 7) {
    // 设置时区,可根据业务需求调整
    date_default_timezone_set('Asia/Shanghai');
    
    $startDate = new DateTime($startDateStr);
    $endDate = new DateTime($endDateStr);
    $segments = [];
    
    while ($startDate <= $endDate) {
        // 计算当前起始日所在周的结束日(默认周日,$weekEndDay=7)
        $currentWeekEnd = (clone $startDate)->modify("next Sunday");
        // 若当前起始日已是周日,直接设为当天
        if ($currentWeekEnd->format('N') != $weekEndDay) {
            $currentWeekEnd = (clone $startDate)->modify("this Sunday");
        }
        
        // 若周结束日超过总结束日期,替换为总结束日
        if ($currentWeekEnd > $endDate) {
            $currentWeekEnd = clone $endDate;
        }
        
        // 保存当前分段
        $segments[] = [
            'start' => $startDate->format('Y-m-d'),
            'end' => $currentWeekEnd->format('Y-m-d')
        ];
        
        // 切换到下一段的起始日(当前段结束日的次日)
        $startDate = (clone $currentWeekEnd)->modify('+1 day');
    }
    
    return $segments;
}

调用示例

$start = '2022-08-05';
$end = '2022-08-16';
$weekSegments = splitDateRangeIntoWeeks($start, $end);

// 格式化输出结果
foreach ($weekSegments as $segment) {
    echo "{$segment['start']} to {$segment['end']}\n";
}

输出结果

2022-08-05 to 2022-08-07
2022-08-08 to 2022-08-14
2022-08-15 to 2022-08-16

自定义周结束日

如果需要将周结束日改为周六(或其他日期),只需传入第三个参数:

// 周结束日设为周六($weekEndDay=6)
$weekSegments = splitDateRangeIntoWeeks($start, $end, 6);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:00:25