Задать вопрос
@zekin375

Как сделать производственный календарь php?

Нужно собрать массив с графиком 2/2, вроде работает но есть проблема с числом старта.

//Получаем количество дней в месяце
$number = cal_days_in_month(CAL_GREGORIAN, 7, 2022); 
$start = 5;
for ($i = $start; $i <= $number; $i++) {
    if (($i+1) & 2) {
        $rabota[$i] = 'Рабочий';
    } else {
        $rabota[$i] = 'Выходной';
    }
}


Если к примеру начала работы 5 числа то все ок
Array
(
    [5] => Рабочий
    [6] => Рабочий
    [7] => Выходной
    [8] => Выходной
    [9] => Рабочий
    [10] => Рабочий
    [11] => Выходной
    [12] => Выходной
    [13] => Рабочий
    [14] => Рабочий
    [15] => Выходной
    [16] => Выходной
    [17] => Рабочий
    [18] => Рабочий
    [19] => Выходной
    [20] => Выходной
    [21] => Рабочий
    [22] => Рабочий
    [23] => Выходной
    [24] => Выходной
    [25] => Рабочий
    [26] => Рабочий
    [27] => Выходной
    [28] => Выходной
    [29] => Рабочий
    [30] => Рабочий
    [31] => Выходной
)


Но если к примеру с 15 числа, то отчет начинается с выходного дня как в массиве, как начинать расчет всегда всегда с рабочих
  • Вопрос задан
  • 365 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 2
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
Если первые два дня всегда рабочие то простейший вариант добавить отдельный счётчик

<?php
$number = cal_days_in_month(CAL_GREGORIAN, 7, 2022); 
$start = 15;
$days_counter = 0;
$rabota = [];
for ($i = $start; $i <= $number; $i++) {
    $days_counter++;

    if($days_counter <= 2) { //1, 2
        $rabota[$i] = 'Рабочий';
    } elseif($days_counter <= 4) { //3, 4
        $rabota[$i] = 'Выходной';
    }
    
    if($days_counter >= 4) { //сбрасываем счётчик после 4 дня
        $days_counter = 0;
    }
}

print_r($rabota);
Ответ написан
iMedved2009
@iMedved2009
Не люблю людей
Объявлять массив сразу с двумя рабочими днями, вставлять сразу парами, счётчик инкрементить парой, что ставить рабочий или выходной определять по предыдущему элементу?
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы