Это хорошая работа для класса DatePeriod
. Мы устанавливаем период из 10 повторений по 2 дня от времени начала (через 2 дня), а затем можем перебирать даты, проверяя выходной день (день недели = 0 или 6), чтобы исключить их из вывода:
$start = new DateTime('+2 days');
$period = new DatePeriod($start, new DateInterval('P2D'), 9);
foreach ($period as $date) {
$dow = (int)$date->format('w');
if ($dow != 0 && $dow != 6) {
$days[$date->format('U')] = $date->format('l, jS M');
}
}
print_r($days);
Выход:
Array (
[1548194036] => Tuesday, 22nd Jan
[1548366836] => Thursday, 24th Jan
[1548712436] => Monday, 28th Jan
[1548885236] => Wednesday, 30th Jan
[1549058036] => Friday, 1st Feb
[1549403636] => Tuesday, 5th Feb
[1549576436] => Thursday, 7th Feb
)
Если вы хотите 10 последовательных дней (исключая выходные) с 2 дней с сегодняшнего дня, вы просто изменили бы вторую строку кода на:
$period = new DatePeriod($start, new DateInterval('P1D'), 9);
и вывод будет:
Array (
[1548197829] => Tuesday, 22nd Jan
[1548284229] => Wednesday, 23rd Jan
[1548370629] => Thursday, 24th Jan
[1548457029] => Friday, 25th Jan
[1548716229] => Monday, 28th Jan
[1548802629] => Tuesday, 29th Jan
[1548889029] => Wednesday, 30th Jan
[1548975429] => Thursday, 31st Jan
)
Демонстрация на 3v4l.org