計算2個日期間有多少個自然周

峰高谷深發表於2024-01-11
 // 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 協議》,轉載必須註明作者和本文連結

相關文章