计算2个日期间有多少个自然周

 // dd($this->diffWeeks('2024-01-01','2024-01-01'));  // 1
 // dd($this->diffWeeks('2024-01-07','2024-01-08')); // 2
 // dd($this->diffWeeks('2024-01-07','2024-01-11')); // 2
 // dd($this->diffWeeks('2024-01-07','2024-01-14')); // 2
 // dd($this->diffWeeks('2024-01-07','2024-01-15')); // 3
 // dd($this->diffWeeks('2023-12-21','2024-01-7')); // 3
 // dd($this->diffWeeks('2023-12-15','2024-02-09')); // 9
function diffWeeks($startDate, $endDate)
    {
        // 开始日期所在周的最后一天
        $startDateEndOfWeek = Carbon::parse($startDate)->endOfWeek();

        // 开始日期所在周的最后一天 >= 结束日期,说明在同一自然周
        if ($startDateEndOfWeek >= Carbon::parse($endDate)) {
            return 1;
        }

        // 结束日期所在周的第一天
        $endDateEndOfWeek = Carbon::parse($endDate)->startOfWeek();

        // 结束日期所在周的第一天、开始日期所在周的最后一天  之间有多少周
        $diffDays = Carbon::parse($endDateEndOfWeek->toDateString())->diffInDays($startDateEndOfWeek->toDateString());
        $completeWeeks = intval($diffDays / 7);

        // 不在同一周,最少2周
        return $completeWeeks + 2;
    }
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 5
3个月前 评论
峰高谷深 (楼主) 3个月前
唐章明 (作者) 3个月前
峰高谷深 (楼主) 3个月前
nff93

emm,总结一下楼主的函数:

if ($start->isSameWeek($end)) {
    return 1;
}
return $start->endOfWeek()->diffInWeeks($end->startOfWeek()) + 2;
3个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!