Калькулятор Рабочих Дней
Вычисляет рабочие дни в диапазоне дат
Расчёт Рабочих Дней
Что такое Калькулятор Рабочих Дней?
Калькулятор рабочих дней считает, сколько реально доступных рабочих дней находится в выбранном диапазоне дат после исключения выходных и указанного числа праздников. Он полезен для оценки сроков поставки, планирования отпуска, расчета зарплаты, счетов, найма и проектных графиков, где обычные календарные дни слишком грубы. Рабочий день не всегда равен календарному: выходные суббота-воскресенье или пятница-суббота, региональные праздники, корпоративные каникулы и переносы рабочих дней могут изменить результат. Инструмент дает быструю оценку на основе выбранной схемы выходных и введенного числа праздников. Для кадровых, юридических и договорных задач результат нужно сверять с официальным календарем. При совместном использовании нужно заранее прояснить входные данные, допущения и ожидаемый результат, чтобы вывод не поняли неверно.
Инструкция по использованию
Инструкция по использованию
- Введите дату начала и дату окончания
- Выберите параметр исключения выходных (Сб-Вс / Пт-Сб / Нет)
- Введите количество государственных праздников (необязательно)
- Нажмите «Рассчитать рабочие дни» для просмотра результатов
Предположения календаря
- Перед расчётом установите правила выходных; календари с пятницей-субботой, субботой-воскресеньем и без выходных дают разные итоги.
- Государственные праздники и дни закрытия компании должны вводиться отдельно, если их необходимо исключить.
Применение
Технический принцип
Подсчёт рабочих дней — это количество календарных дней в включительном диапазоне `[начало, конец]`, которые не являются ни выходными, ни праздниками. Стандартная формула для включительного диапазона: `всего_дней = (конец - начало) / 86_400_000 + 1`, когда обе границы нормализованы к полуночи UTC, затем вычитаются выходные и праздничные дни. День недели определяется через `Date.prototype.getDay()`, возвращающий `0` для воскресенья до `6` для субботы — обратите внимание на распространённую ошибку: `getDay()` — это не `getDate()`, и результат зависит от часового пояса браузера, поэтому UTC-дата, пересекающая полночь, может попасть на другой день недели, чем ожидалось. Паттерн выходных различается по регионам: глобальное значение по умолчанию — суббота-воскресенье (западные страны, Индия, большинство стран Азии), но на Ближнем Востоке исторически использовались четверг-пятница, и к 2024 году большинство стран Персидского залива (ОАЭ, Бахрейн, Кувейт, Катар) перешли на пятницу-субботу или даже субботу-воскресенье с неполной пятницей. Иран, Афганистан и части Южной Азии по-прежнему соблюдают только пятницу; Израиль — пятницу-субботу. Инструмент предоставляет три стандартных пресета: суббота-воскресенье, пятница-суббота и «без исключения», а праздничные дни покрываются вычитанием. Сам алгоритм подсчёта имеет две практичные реализации. Наивная итерация перебирает дни по одному: `for (let d = start; d <= end; d.setDate(d.getDate()+1)) if (![0,6].includes(d.getDay())) count++`. Это O(n) по календарным дням и тривиально читается. Альтернатива в замкнутой форме вычисляет `полные_недели * 5 + рабочие_дни_в_неполной_неделе` и работает за O(1), что важно для диапазонов, охватывающих много лет. Праздники, выпадающие на выходные, не должны вычитаться дважды, поэтому канонический паттерн — фильтровать праздники через `holidays.filter(h => !isWeekend(h)).length`. Китайская система тяосю (перенос рабочих дней) добавляет сложность, которую чистая логика выходных не может отразить: Госсовет ежегодно публикует список, превращающий конкретные субботы или воскресенья в рабочие дни для компенсации удлинённых каникул на Китайский Новый год или Национальный праздник, поэтому для китайского календаря список праздников должен сопровождаться явным списком «отработок», а не только правилом дня недели.
- Формула включительного диапазона: `всего_дней = (конец - начало) / 86_400_000 + 1` с обеими датами, нормализованными к полуночи UTC, для избежания смещения при переходе на летнее время.
- `Date.prototype.getDay()` возвращает от 0 (вс) до 6 (сб) в локальном часовом поясе браузера — не UTC, поэтому для timezone-зависимого кода следует использовать `getUTCDay()`.
- Пресеты выходных: сб-вс (западные страны, Индия, большинство Азии), пт-сб (большинство стран Персидского залива с 2006-2013), только пт (Иран), без исключений (круглосуточные операции).
- Формула O(1) в замкнутой форме: `полные_недели * 5 + доп_рабочие_дни_в_неполной_неделе`; предпочтительнее итерации по дням для многолетних диапазонов.
- Праздники, выпадающие на выходные, не должны вычитаться дважды: вычитайте `holidays.filter(h => !isWeekend(h)).length`, а не общее число праздников.
- Китайское тяосю (Госсовет): отдельные субботы/воскресенья становятся法定ными рабочими днями для компенсации удлинённых каникул; требуется явный список отработок.
- Государственные праздники США (согласно 5 U.S.C. § 6103) составляют 11 рабочих дней в календарном году: Новый год, День Мартина Лютера Кинга, День президентов, День памяти, День независимости (Juneteenth), День независимости, День труда, День Колумба, День ветеранов, День благодарности, Рождество.
Примеры
Рабочие дни календарного 2026 года
Дата начала: 2026-01-01
Дата конца: 2026-12-31
Выходные: суббота и воскресенье
Праздники: 13 (государственные праздники Китая после 调休)
Всего дней: 365
Выходных: 104
Праздников: 13
Рабочих дней: 248Ёмкость двухнедельного спринта
Дата начала: 2026-06-15 (понедельник)
Дата конца: 2026-06-26 (пятница)
Выходные: суббота и воскресенье
Праздники: 0
Всего дней: 12
Выходных: 2
Рабочих дней: 10 (полный двухнедельный спринт, 4 разработчика => 40 рабочих дней)Команда на Ближнем Востоке с выходными в пятницу-субботу
Дата начала: 2026-09-01
Дата конца: 2026-09-30
Выходные: пятница и суббота
Праздники: 1 (региональный праздник)
Всего дней: 30
Выходных: 8 (пт + сб в сентябре)
Рабочих дней: 21Период онбординга после государственного праздника
Дата начала: 2026-10-08 (первый рабочий день после Golden Week)
Дата конца: 2026-10-30
Выходные: суббота и воскресенье
Праздники: 0
Всего дней: 23
Выходных: 6
Рабочих дней: 17 (достаточно времени для 3-недельного плана онбординга)Планирование Q1 2027 с федеральными праздниками США
Дата начала: 2027-01-01
Дата конца: 2027-03-31
Выходные: суббота и воскресенье
Праздники: 4 (New Year, MLK Day, Presidents Day, Good Friday)
Всего дней: 90
Выходных: 26
Рабочих дней: 60Часто задаваемые вопросы
Как считаются рабочие дни?
По умолчанию учитываются понедельник–пятница, суббота и воскресенье пропускаются. Праздники, указанные в списке, также исключаются. Страница показывает общее число календарных дней, выходных, праздников и итоговое число рабочих дней.
Государственные праздники применяются автоматически?
Нет. Калькулятор не подгружает праздники автоматически. Количество праздничных дней нужно ввести вручную. За точными цифрами обращайтесь к официальному календарю вашей страны.
Учитываются ли «отрабатываемые» субботы (调休)?
Нет. Калькулятор исключает только выходные и введённое вами число праздников. Он не обрабатывает китайскую систему 调休 (перенос рабочих дней) и аналогичные политики автоматически. Если в вашем графике есть отработки, скорректируйте правило выходных или число праздников вручную.
Можно ли исключить только выходные, но не праздники?
Да. Отключите список праздников, и расчёт будет учитывать только субботу и воскресенье. Можно также настроить, какие дни считаются выходными — например, в некоторых странах Ближнего Востока выходные приходятся на пятницу и субботу.
Чем этот инструмент отличается от калькулятора разницы дат?
Калькулятор разницы дат возвращает календарные дни. Этот инструмент возвращает рабочие дни, пропуская выходные и праздники. Используйте его для сроков проектов, контрактных дат и SLA, а разницу дат — для общего прошедшего времени.
Работает ли он для прошедших дат?
Да. Он рассчитывает рабочие дни между любыми двумя датами — прошлыми или будущими. Введите начальную и конечную дату, выберите правила выходных и количество праздников — страница посчитает общее число рабочих дней в этом диапазоне.
Загружаются ли мои данные на сервер?
Нет. Расчёт выполняется в вашем браузере. Количество праздников и даты не сохраняются и не передаются.