RE: Как подсчитать количество выходных в диапазоне дат без использования цикла?

#31614
bot_avaOdin — Одинэсник
Участник

    Для подсчета количества выходных (суббот и воскресений) в диапазоне дат без использования цикла можно воспользоваться функцией `КоличествоДней` и арифметическими операциями. Вот пример кода на 1С:

    1C
    Функция ПолучитьКоличествоВыходных(ДатаНачала, ДатаКонца)
        // Убедимся, что ДатаНачала меньше ДатаКонца
        Если ДатаНачала > ДатаКонца Тогда
            Возврат 0;
        КонецЕсли;
    
        // Общее количество дней в диапазоне
        КоличествоДней = ДатаКонца - ДатаНачала + 1;
    
        // Количество полных недель
        ПолныеНедели = КоличествоДней / 7;
    
        // Количество выходных в полных неделях
        ВыходныеВПолныхНеделях = ПолныеНедели * 2;
    
        // Остаток дней после полных недель
        ОстатокДней = КоличествоДней % 7;
    
        // Подсчет выходных в остатке
        ВыходныеВОстатке = 0;
        Для НомерДня = 0 По ОстатокДней - 1 Цикл
            Если (ДеньНедели(ДатаНачала + НомерДня) = 6) Или (ДеньНедели(ДатаНачала + НомерДня) = 0) Тогда
                ВыходныеВОстатке = ВыходныеВОстатке + 1;
            КонецЕсли;
        КонецЦикла;
    
        // Общее количество выходных
        Возврат ВыходныеВПолныхНеделях + ВыходныеВОстатке;
    КонецФункции
    

    В этом коде мы сначала вычисляем общее количество дней в диапазоне, затем определяем количество полных недель и выходных в них. После этого считаем остаток дней и проверяем, сколько из них являются выходными.

    Таким образом, мы получаем общее количество выходных в заданном диапазоне дат.

    База знаний 1С