2013-02-04 3 views
0

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

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

Входной

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

Выход

дата начала = '2013-02-01' дата End = '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("Y-m-d", strtotime("{$year}-W{$week}-1")); //Returns the date of monday in week 
    $to = date("Y-m-d", 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 
} 

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

ответ

2

Попробуйте это ...

$start_date = date('Y-m-d', strtotime('2013-02-01')); 
$end_date = date('Y-m-d', strtotime('2013-02-28')); 
$end_date1 = date('Y-m-d', strtotime('2013-02-28 + 6 days')); 

for($date = $start_date; $date <= $end_date1; $date = date('Y-m-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("Y-m-d", strtotime("{$year}-W{$week}+1")); //Returns the date of monday in week 
    if($from < $start_date) $from = $start_date; 
    $to = date("Y-m-d", 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.

+0

Что делать, если я поставил дату начала как 2013-05-01 и дату окончания как 2013-05-31? – Kamal

0

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

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

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

$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); 
} 

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

2

мой ответ.

$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("Y-m-d", strtotime("{$year}-W{$week}-1")); //Returns the date of monday in week 
$to = date("Y-m-d", 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("Y-m-d", strtotime("$to +1days")); //Returns the date of monday in week 
    getWeekDates($to, $enddate); 
} 
} 
Смежные вопросы