Функция расчета рабочих дней с учетом праздников и выходных.

13.02.2023 - Меньше чем минута читать

Пришлось тут написать функцию расчета рабочих дней. Стояла задача: от будущей даты рассчитать назад дату по рабочим дням, исключая выходные и праздники.
То есть:
Есть 1 сентября, оттуда нужно отнять 64 рабочих дня(то есть исключить субботы и воскресения + праздничные дни).
Итак. Таблица праздников есть в системе (правда, даты там оказались не в timestamp). Дни недели зашиты в php и компе. Размещаем данную функцию расчета в пользовательских PHP скриптах.

function getFutureBusinessDay($num_business_days, $today_ymd = null, $count_day = '+1') {

$business_day_count = 0;

$current_timestamp = empty($today_ymd) ? time() : strtotime($today_ymd);

while ($business_day_count < $num_business_days) {

$next1WD = strtotime($count_day.' weekday', $current_timestamp);

$next1WDDate = date('Y-m-d', $next1WD);

$select_holy_query_db=db_query("select id from app_holidays where '".$next1WDDate."' BETWEEN start_date and end_date");

if (!db_fetch_array($select_holy_query_db)) {

$business_day_count++; }

$current_timestamp = $next1WD;

}

return $current_timestamp;

}

Возможно, написано не совсем идеально написано, но работает.
На вход при применении даем 3 переменные:
Кол-во рабочих дней, нужную дату в формате «Год-месяц-день», направление счета — от даты вверх,от даты вниз. Последние два параметра можно не указывать, тогда по умолчанию будет текущая дата, счет всегда вверх.
На выходе получаем timestamp нужной даты.
Можно адаптировать на запрос из интернета, но у меня часто попадается закрытый контур, и проще забить в базу даты.

Для тех кто работает полностью в онлайн, можно использовать https://www.isdayoff.ru
API производственного календаря

Проверка даты на принадлежность к нерабочему дню, согласно официальным указам и распоряжениям.
Поддерживает:
Беларусь(by),Казахстан (kz),Россия (ru),Украина (ua),США (us),Узбекистан (uz),Турция (tr),Латвия (lv).

Надеюсь, будет полезно.

BONUS!!! Купон на скидку при покупке Дополнения CRM Руководителя:

PARTNER10-20220417-H8J1TD9H — 10% скидки гарантировано!

Tags: , , , , , ,