function getWeekStartAndEnd($firstday, $lastday, $first = 1)
{
//当前日期
if (!$firstday) $firstday = date("Y-m-d", time());
//$first =1 表示每周星期一为开始日期 0表示每周日为开始日期
$weeks = [];
while ($firstday < $lastday){
//获取当前周的第几天 周日是 0 周一到周六是 1 - 6
$w = date('w', strtotime($firstday));
//获取本周开始日期,如果$w是0,则表示周日,减去 6 天
$week_start = date('Y-m-d', strtotime("$firstday -" . ($w ? $w - $first : 6) . ' days'));
//本周结束日期
$week_end = date('Y-m-d', strtotime("$week_start +6 days"));
$weeks[] = [
'week_start' => $week_start,
'week_end' => $week_end
];
$firstday = date('Y-m-d', strtotime("$firstday +7 day"));
}
//最后日期如跨月,销毁
$lastArr = count($weeks);
if ($weeks[$lastArr-1]['week_end'] > $lastday) {
unset($weeks[$lastArr-1]);
}
return $weeks;
}
执行结果
Array
(
[0] => Array
(
[week_start] => 2021-03-29
[week_end] => 2021-04-04
)
[1] => Array
(
[week_start] => 2021-04-05
[week_end] => 2021-04-11
)
[2] => Array
(
[week_start] => 2021-04-12
[week_end] => 2021-04-18
)
[3] => Array
(
[week_start] => 2021-04-19
[week_end] => 2021-04-25
)
)