Получить всю дату начала недели и дату окончания в пределах диапазона дат в php

Как получить всю дату начала недели и дату окончания в диапазоне дат в PHP?

Начало недели = воскресенье и неделя = суббота

вход

$ Start_date = '2013-02-01'
$ end_date = '2013-02-28'

Вывод

дата начала = '2013-02-01' Дата окончания = '2013-02-02'
дата начала = '2013-02-03' Дата окончания = '2013-02-09'
дата начала = '2013-02-10' Дата окончания = '2013-02-16'
дата начала = '2013-02-17' Дата окончания = '2013-02-23'
дата начала = '2013-02-24' Дата окончания = '2013-02-28'

Ниже код возвращает начало и конец недели

function getWeekDates($date) { $week = date('W', strtotime($date)); $year = date('Y', strtotime($date)); $from = date("Ymd", strtotime("{$year}-W{$week}-1")); //Returns the date of monday in week $to = date("Ymd", strtotime("{$year}-W{$week}-7")); //Returns the date of sunday in week echo "Start Date-->".$from."End Date -->".$to;//Output : Start Date-->2012-09-03 End Date-->2012-09-09 } 

Как я могу получить результат выше?

Попробуй это…

 $start_date = date('Ym-d', strtotime('2013-02-01')); $end_date = date('Ym-d', strtotime('2013-02-28')); $end_date1 = date('Ym-d', strtotime('2013-02-28 + 6 days')); for($date = $start_date; $date <= $end_date1; $date = date('Ym-d', strtotime($date. ' + 7 days'))) { echo getWeekDates($date, $start_date, $end_date); echo "\n"; } function getWeekDates($date, $start_date, $end_date) { $week = date('W', strtotime($date)); $year = date('Y', strtotime($date)); $from = date("Ymd", strtotime("{$year}-W{$week}+1")); //Returns the date of monday in week if($from < $start_date) $from = $start_date; $to = date("Ymd", strtotime("{$year}-W{$week}-6")); //Returns the date of sunday in week if($to > $end_date) $to = $end_date; echo "Start Date-->".$from."End Date -->".$to;//Output : Start Date-->2012-09-03 End Date-->2012-09-09 } 

См. Codepad .

мой ответ.

 $start_date = '2013-02-01'; $end_date = '2013-02-28'; getWeekDates($start_date, $end_date); function getWeekDates($date, $enddate) { $week = date('W', strtotime($date)); $year = date('Y', strtotime($date)); $from = date("Ymd", strtotime("{$year}-W{$week}-1")); //Returns the date of monday in week $to = date("Ymd", strtotime("{$year}-W{$week}-7")); //Returns the date of sunday in week $Edate = strtotime($enddate); $Sdate = strtotime($to); if ($Edate <= $Sdate) { echo "<br>Start Date-->" . $from . "End Date -->" . $enddate; //Output : Start Date-->2012-09-03 End Date-->2012-09-09 } else { echo "<br>Start Date-->" . $from . "End Date -->" . $to; //Output : Start Date-->2012-09-03 End Date-->2012-09-09 $to = date("Ymd", strtotime("$to +1days")); //Returns the date of monday in week getWeekDates($to, $enddate); } } 

Надеюсь, я правильно понял ваш вопрос.

Что вам нужно сделать, так это позвонить своей функции с датой начала, затем добавить семь дней к дате начала и снова вызвать свою функцию … Вы должны сделать это, пока не достигнете даты окончания.

Вот какой непроверенный код:

 $current_date = strtotime($start_date); $end_date_as_date = strtotime($end_date); while($current_date < $end_date_as_date){ getWeekDates($current_date); $current_date= strtotime("+7 day", $current_date); } 

Надеюсь это поможет. Если вам нужна дополнительная информация, оставьте комментарий.