@Batyabest

Как вывести на PHP график работы, начиная с 1 числа?

Подскажите, как вывести на PHP график работы, начиная с 1 числа сутки через двое. Причем, если день попадает на выходной, то переносим его на ближайший следующий понедельник и далее снова сутки через двое. Пробую так, но выводит то не с 1 числа то не 1 через 2, а 2 через 2.

$date = date('d-m-Y');
$year = date('Y');
$month = date('m');

function isWeekend($date) {
    return (date('N', strtotime($date)) >= 6);
}
function isWorkDay($num) {
    return ($num % 4) < 2;
}
for ($i = 0; $i < $i <= date('t'); $i++) {
    if (isWorkDay($i)) {
        echo $i . '+';
        echo PHP_EOL;
    } else {
        echo $i;
        echo PHP_EOL;
    }
}
  • Вопрос задан
  • 235 просмотров
Пригласить эксперта
Ответы на вопрос 2
rozhnev
@rozhnev Куратор тега PHP
Fullstack programmer, DBA, медленно, дорого
<?php
$date = date('Y-m-01');
$next_month = date('Y-m-d', strtotime('+1 month', strtotime($date)));

function nextWorkDay($date) {
	$day_of_week = date('N', strtotime($date));
	
	if ($day_of_week>5) {
		//echo "Weekend: " . $date;
		$shift = 8-$day_of_week;
		return date('Y-m-d', strtotime("+{$shift} day", strtotime($date)));
	} else {
		echo "Work day ($day_of_week):" . $date . PHP_EOL;
		return date('Y-m-d', strtotime('+3 day', strtotime($date)));
	}
}

while ($date < $next_month) {
	$date = nextWorkDay($date);
}


php code online
Ответ написан
kawabanga
@kawabanga
Тут могут быть ошибки. Лучше переделать, загружая дату в Datetime, а потом спрашивать номер дня недели и сравнивать.
https://www.php.net/manual/en/class.datetime.php
(date('N', strtotime($date)) >= 6);


А потом -
function isWorkDay($num) {
    return  !isWeekend($num)
}


Только вопрос еще - а почему в эти две идентичные функции, вы в одну загружаете date, а во вторую $num?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы