计算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 协议》,转载必须注明作者和本文链接
推荐文章: