...

Проверить является ли конкретная дата рабочим днём

Тема в разделе "Примеры сценариев", создана пользователем ksannikov, 27 окт 2025 в 09:51.

  1. ksannikov

    ksannikov Участник

    Я хочу показать пример, как с помощью рабочего календаря проверить, является ли конкретная дата рабочим днём.

    В примере, я получаю настройки рабочего календаря, формирую индексы выходных дней в неделе, а затем проверяю дату на специальные дни (укороченные, праздничные). Если дата приходится на выходной, беру следующий день и повторяю проверку до тех пор, пока не найду рабочий день. В результате возвращаю новую дату - рабочий день по календарю.


    Код:
    
     async function getWorkDay(dateTDatetime): Promise<TDatetime> {
        
    //получаем настройки производственного календаря
        
    const general_settings await System.productionSchedule.getGeneralSettings()
        
    //получаем выходные дни недели нашей компании, формируем из объекта массив, для получения индексов дней
        
    const weekends general_settings.weekends as any
        
    const weekends_arr Object.keys(weekends).map(key => ({ daykeyweekendweekends[key] }));
        
    //воскресенье 1ый день недели, а не понедельник
        
    const rotated_arr = [weekends_arr.pop()!, ...weekends_arr]
        
    //индексы выходных дней
        
    const weekends_index rotated_arr.reduce((accnumber[], eli) => {
            if (
    el.weekendacc.push(i);
            return 
    acc;
        }, []).
    join()
        
    let curr_date date
        let this_work_day 
    false
        
    //проверяем дату, рабочий ли это день       
        
    while (!this_work_day) {
            
    //получаем спец.дни по календарю
            
    const info_about_curr_date await System.productionSchedule.getSpecialDays(curr_datecurr_date)
            
    //если это не спец.день с признаком выходной и индекс дня не равен выходному дню компании, день рабочий
            
    if ((!info_about_curr_date.length || !info_about_curr_date[0].holiday) && !weekends_index.includes(curr_date.format('e'))) {
                
    this_work_day true
            
    } else {
                
    curr_date curr_date.addDate(001)
            }
        }
        return 
    curr_date
    }

    Еще больше полезной информации в ТГ канале WhatDaELMA365
  2. denis.ganchev.ftn

    denis.ganchev.ftn Новичок

    Или можно использовать метод калькуляции даты с учетом рабочего календаря
    Код:
    
    const workTime await isWorkTime(new Datetime(), new Duration(1'milliseconds'));

    async function isWorkTime(datetimeTDatetimedurationTDuration): Promise<boolean> {
        const 
    work_datetime await System.productionSchedule.calcDate(datetimeduration);
        return 
    work_datetime.getDate().equal(datetime.getDate());
    }