КРЕАТИВНЫЕ САЙТЫ И ПРИЛОЖЕНИЯ,
КАЧЕСТВЕННЫЕ WEB-УСЛУГИ
phone

Рабочий календарь

API производственного календаря
для проектов и бизнеса

Рабочий календарь

Получить токен

JSON API производственного календаря РФ: выходные, праздники, предпраздничные и нерабочие дни — одним запросом GET /api/calendar. Доступ по токену, при необходимости с учётом региона (area — код субъекта или название). Подходит для расчёта KPI, дедлайнов, отпусков, смен и нормы рабочего времени без ручной сверки с постановлениями.

<script setup>
import { ref, onMounted } from 'vue'

// API (README): GET /api/calendar?token=...
// Host для токена и HTTPS→HTTP закрыты в браузере — same-origin прокси.
const CALENDAR_API = 'https://studiowest.ru/assets/teme_sw/api/calendar.php'
const TOKEN = 'eyJob3N0IjoiaHR0cHM6Ly9zdHVkaW93ZXN0LnJ1IiwiaXAiOiJodHRwczovL3N0dWRpb3dlc3QucnUiLCJ2YWxpZEZyb20iOiIyMDI2LTA3LTI1VDA5OjE5OjE2LjM3OFoiLCJ2YWxpZFRvIjoiMjAyNy0wNy0yNVQwOToxOToxNi4zNzhaIn0.hGgiCqqCewB_e6KhPO-l4AF7Kva-lJ-kfYjk6I4GT7g'

function pad(n) {
  return String(n).padStart(2, '0')
}

function todayFirstDate() {
  const d = new Date()
  return pad(d.getDate()) + '-' + pad(d.getMonth() + 1) + '-' + d.getFullYear()
}

/** Конец предыдущего месяца — даты ≤ этой блокируются */
function endOfPreviousMonth() {
  const d = new Date()
  const prev = new Date(d.getFullYear(), d.getMonth(), 0)
  return pad(prev.getDate()) + '-' + pad(prev.getMonth() + 1) + '-' + prev.getFullYear()
}

function fmtRu(iso) {
  if (!iso) return null
  const d = new Date(iso)
  if (Number.isNaN(d.getTime())) return null
  return pad(d.getDate()) + '-' + pad(d.getMonth() + 1) + '-' + d.getFullYear()
}

function dayAfterIso(iso) {
  if (!iso) return null
  const d = new Date(iso)
  if (Number.isNaN(d.getTime())) return null
  d.setDate(d.getDate() + 1)
  return pad(d.getDate()) + '-' + pad(d.getMonth() + 1) + '-' + d.getFullYear()
}

const data = ref({
  firstDate: todayFirstDate(),
  holiday: {
    holidays: [],
    preholidays: [],
    nowork: [],
    holiday: []
  }
})

const limitation = ref([
  { endDate: endOfPreviousMonth() }
])

onMounted(async () => {
  try {
    const url = CALENDAR_API + '?token=' + encodeURIComponent(TOKEN)
    const res = await fetch(url)
    if (!res.ok) {
      console.warn('calendar HTTP', res.status)
      return
    }
    const cal = await res.json()
    data.value.holiday = {
      holidays: cal.holidays || cal.weekend,
      preholidays: cal.preholidays || cal.preholiday,
      nowork: cal.nowork || [],
      holiday: cal.holidays || cal.holiday
    }
    const limits = [{ endDate: endOfPreviousMonth() }]
    const afterToken = dayAfterIso(cal.validTo)
    if (afterToken) limits.push({ startDate: afterToken })
    limitation.value = limits
  } catch (e) {
    console.warn('calendar fetch failed', e)
  }
})
</script>

<sw-date-picker
  :limitation="limitation"
  :data="data"
  range="range"
></sw-date-picker>

Задачи

  1. Дать разработчикам простой и быстрый API вместо разрозненных таблиц и ручного учёта праздников.
  2. Покрыть федеральный календарь РФ и региональные особенности субъектов.
  3. Связать каждую дату с нормативно-правовым обоснованием.
  4. Сохранить длинный архив и прогнозные периоды для аналитики и планирования.

Решение

Сделали самостоятельный API-сервис с выдачей токена и простым JSON-ответом. Интеграция — один GET-запрос: в ответе сразу списки выходных, праздников, предпраздничных и нерабочих дней, плюс срок действия токена.

GET /api/calendar?token=YOUR_TOKEN

# регион можно передать тремя способами:
GET /api/calendar?token=YOUR_TOKEN&area=23
GET /api/calendar?token=YOUR_TOKEN&area=Краснодарский
GET /api/calendar?token=YOUR_TOKEN&area=Краснодарский%20край

# или через заголовок
Authorization: Bearer YOUR_TOKEN
X-Area: 23

Пример запроссов к API

Список доступных регионов: GET /api/areas. Без area возвращается федеральный календарь.

Параметр area — опциональный код субъекта РФ. Принимает:

  • номер региона — код субъекта: 23 (Краснодарский край), 16 (Татарстан), 92 (Севастополь);
  • короткое имя — без «область» / «край» / «Республика», можно без пробелов: Краснодарский, Татарстан, Саха(Якутия);
  • полное название — как в официальном имени: Краснодарский край, Республика Татарстан, г. Севастополь.
{
  "weekend": [
    "2026-01-01",
    "2026-01-02",
    "2026-01-03"
  ],
  "holiday": [
    "2026-01-01",
    "2026-01-02",
    "2026-01-07"
  ],
  "preholiday": [
    "2026-04-30",
    "2026-11-03"
  ],
  "nowork": [
    "2020-03-30",
    "2020-03-31"
  ],
  "validFrom": "2026-07-25T09:19:16.378Z",
  "validTo": "2027-07-25T09:19:16.378Z"
}

Пример ответа: массивы дат ISO (YYYY-MM-DD) и период действия токена. При указании area в ответ дополнительно попадает поле региона и региональные праздники.

Возможности

  • Быстрая интеграция. Подключение без лишней обвязки — календарь доступен сразу после получения токена.
  • Региональные праздники. Календари субъектов РФ с местными и национальными событиями.
  • Нормативное обоснование. У каждой даты — реквизиты актов, которыми она закреплена.
  • Архив с 2018 года. Для ретроспективной аналитики и исторических расчётов.
  • Прогнозы до 2031 года. Планирование вперёд на экспертных календарных данных.

Для кого

API нужен кадровым и расчётным системам, ERP/CRM, сервисам отпусков и смен, внутренним дашбордам и любым продуктам, где важны рабочие дни и переносы. Юридическая база — Трудовой кодекс и акты Правительства, Госдумы и Президента.

Производственный календарь на 2026 год

рабочий выходной праздник предпраздничный * нерабочий

I квартал

Январь
пнвтсрчтптсбвс
1234
567891011
12131415161718
19202122232425
262728293031
Февраль
пнвтсрчтптсбвс
1
2345678
9101112131415
16171819202122
232425262728
Март
пнвтсрчтптсбвс
1
2345678
9101112131415
16171819202122
23242526272829
3031
ИтогоЯнвФевМар
календарных90312831
рабочих55151921
вых./праздн.3516910
40 ч. неделя440.0120.0152.0168.0
36 ч. неделя396.0108.0136.8151.2
24 ч. неделя264.072.091.2100.8

II квартал

Апрель
пнвтсрчтптсбвс
12345
6789101112
13141516171819
20212223242526
27282930*
Май
пнвтсрчтптсбвс
123
45678*910
11121314151617
18192021222324
25262728293031
Июнь
пнвтсрчтптсбвс
1234567
891011*121314
15161718192021
22232425262728
2930
ИтогоАпрМайИюн
календарных91303130
рабочих62221921
вых./праздн.298129
40 ч. неделя493.0175.0151.0167.0
36 ч. неделя443.4157.4135.8150.2
24 ч. неделя294.6104.690.299.8

III квартал

Июль
пнвтсрчтптсбвс
12345
6789101112
13141516171819
20212223242526
2728293031
Август
пнвтсрчтптсбвс
12
3456789
10111213141516
17181920212223
24252627282930
31
Сентябрь
пнвтсрчтптсбвс
123456
78910111213
14151617181920
21222324252627
282930
ИтогоИюлАвгСен
календарных92313130
рабочих66232122
вых./праздн.268108
40 ч. неделя528.0184.0168.0176.0
36 ч. неделя475.2165.6151.2158.4
24 ч. неделя316.8110.4100.8105.6

IV квартал

Октябрь
пнвтсрчтптсбвс
1234
567891011
12131415161718
19202122232425
262728293031
Ноябрь
пнвтсрчтптсбвс
1
23*45678
9101112131415
16171819202122
23242526272829
30
Декабрь
пнвтсрчтптсбвс
123456
78910111213
14151617181920
21222324252627
28293031
ИтогоОктНояДек
календарных92313031
рабочих64222022
вых./праздн.289109
40 ч. неделя511.0176.0159.0176.0
36 ч. неделя459.8158.4143.0158.4
24 ч. неделя306.2105.695.0105.6

Нормы рабочего времени в 2026 году

Кол-во дней за 2026 год
календарных — 365
рабочие дни — 247
выходных/праздничных — 118

Рабочее время за 2026 год (в часах)
при 40-часовой неделе — 1972.0
при 36-часовой неделе — 1774.4
при 24-часовой неделе — 1181.6

* Предпраздничные дни, в которые продолжительность работы сокращается на один час. Источник — API производственного календаря Studio West (федеральный календарь РФ).