Как получить каждый конкретный день недели в заданном диапазоне дат в 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);

3

Решение

Взгляните на библиотеку под названием когда, его «Библиотека рекурсий даты / календаря для 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;
1

Другие решения

Если я не ошибаюсь, чем вы можете просто использовать 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

демонстрация

0

По вопросам рекламы [email protected]