此方法在區(qū)間日期拆分自然周或自然月使用。
話不多說,直接上代碼
/**
* 根據(jù)時間區(qū)間,取出(自然月或自然周)的對應數(shù)組
* @param string $start Y-m-d H:i:s
* @param string $end Y-m-d H:i:s
* @param string $interval 'month' 按照自然月劃分,'week' 按照自然周劃分
* @return array
* @throws Exception
*/
function generateDateRanges( string $start='', string $end='', string $interval=''): array
{
$startDateTime = new DateTime($start);
$endDateTime = new DateTime($end);
$result = [];
while ($startDateTime <= $endDateTime) {
$endDate = $startDateTime->format('Y-m-d');
if ($interval === 'month') {
// 調(diào)整日期為當前月份的最后一天
$startDateTime->modify('last day of this month');
} elseif ($interval === 'week') {
// 調(diào)整日期為下一個星期日
$startDateTime->modify('next sunday');
}
$startDate = $startDateTime->format('Y-m-d');
// 反轉(zhuǎn)起始和結(jié)束日期的順序
$result[] = [$endDate, $startDate];
// 增加一天
$startDateTime->modify('+1 day');
}
// 反轉(zhuǎn)數(shù)組順序,使其倒序
return array_reverse($result);
}
$stime = '2023-07-13 00:00:00';
$etime = '2023-08-08 11:35:03';
// 傳入 'month' 表示按照自然月劃分,傳入 'week' 表示按照自然周劃分
$interval = 'month';
$dateRanges = generateDateRanges($stime, $etime, $interval);
print_r($dateRanges);