@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 числа, то отчет начинается с выходного дня как в массиве, как начинать расчет всегда всегда с рабочих
  • Вопрос задан
  • 250 просмотров
Решения вопроса 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
Не люблю людей
Объявлять массив сразу с двумя рабочими днями, вставлять сразу парами, счётчик инкрементить парой, что ставить рабочий или выходной определять по предыдущему элементу?
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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