Добро пожаловать в переполнение стека. Поскольку PHP7 доступно на многих серверах, вы можете использовать удобные классы дат. Следующий пример делает именно то, что вы хотите. Используемые классы доступны с PHP5 (в течение нескольких лет).
$start = new DateTime('2020-01-31T23:00:00');
$end = (new DateTime('2020-01-31T23:00:00'))->modify('midnight +3 weekdays');
$interval = new DateInterval('PT1H');
$range = new DatePeriod($start, $interval, $end);
foreach ($range as $date) {
if ($date->format('N') == 6 || $date->format('N') == 7) {
continue;
}
var_dump($date->format('Y-m-d H:i:s'));
}
Сначала мы определяем дату начала и окончания. Для этого примера я выбрал прошлую пятницу, чтобы продемонстрировать, что суббота и воскресенье игнорируются. Не позволяйте трем дням недели сбить вас с толку. Мы начинаем в полночь даты начала, чтобы получить полные два рабочих дня, включая всю дату начала. Поскольку вы хотели каждый час, мы используем класс DateInterval
и определяем почасовой интервал. С началом, концом и интервалом мы можем перебрать диапазон с классом DatePeriod
. В l oop мы проверяем, является ли день недели (при условии, что 6 - суббота, а 7 - воскресенье) - суббота и воскресенье, дата будет изменена, пока не будет достигнут следующий понедельник. Выходные данные - каждый час, пропуская выходные.
Пожалуйста, посмотрите в документации php дату и время , чтобы понять, что эти классы могут сделать для вас и как они работают. Не копируйте этот пример.