2015-10-03 3 views
2

Это дает мне каждую помидорную дату в диапазоне дат.Как получить каждый конкретный день недели в пределах заданного диапазона дат в PHP?

Вопрос: Как получить каждый понедельник и пятницу недели?

$start_date = date('Y-m-d'); 
$end_date = date('Y-m-d', strtotime($start_date . ' + 1 MONTH')); 

for(
    $i = strtotime('Monday', strtotime($start_date)); 
    $i <= strtotime($end_date); 
    $i = strtotime('+1 WEEK', $i) 
) { 
    echo date('Y-m-d', $i). '<br>'; 
} 

Мой Обновление:

$my_dates = []; 
for(
    $i = strtotime($start_date); 
    $i <= strtotime($end_date); 
    $i = strtotime('+1 DAY', $i) 
) { 
    if(in_array(date('N', $i), array(1, 5))) { 
     $my_dates[] = date('Y-m-d', $i); 
    } 
} 

var_dump($my_dates); 
+0

Между понедельником и пятницей существует только так много секунд. –

+0

Вы можете перебирать все дни и сравнивать значение 'date (" N ")' (1 - понедельник) – Halcyon

+0

http://codepad.org/eRWSC5MU –

ответ

1

Взгляните в библиотеке под названием When, это "Дата/Календарь рекурсии библиотека для PHP 5.3+".

Скажем график MF на следующий месяц:

$now = new DateTime('NOW'); 
$till = clone $now; 
$till->modify('+1 month'); 

$r = new When(); 
$r->startDate($now) 
    ->freq("weekly") 
    ->until($till) 
    ->byday(array('MO', 'FR')) 
    ->generateOccurrences(); 

$occurrences = $r->occurrences; 
0

Если я не ошибаюсь, чем вы можете просто использовать for цикл вроде, как

$start = "2015-09-01"; 
$end = date('Y-m-d', strtotime("$start +1 months")); 
$period = floor((strtotime($end) - strtotime($start))/(24*60*60)); 

for($i = 0; $i < $period; $i++){ 
    if(in_array(date('l',strtotime("$start +$i day")),["Monday","Friday"])) 
     echo date('l d M, Y',strtotime("$start +$i day"))."\n"; 
} 

Выход:

Friday 04 Sep, 2015 
Monday 07 Sep, 2015 
Friday 11 Sep, 2015 
Monday 14 Sep, 2015 
Friday 18 Sep, 2015 
Monday 21 Sep, 2015 
Friday 25 Sep, 2015 
Monday 28 Sep, 2015 

Demo

Смежные вопросы