webmasterskaya/production-calendar

Production calendar of Russian Federation

3.0.0 2025-01-24 20:59 UTC

This package is auto-updated.

Last update: 2025-01-24 21:03:43 UTC


README

PHP библиотека, которая определяет рабочие, праздничные, выходные и нерабочие дни, в соответствии с производственным календарём Российской Федерации 2013-2025гг
Данные предоставлены сайтом http://www.consultant.ru/

  • ✔ Работает оффлайн
  • ✔ Автономный (базу можно актуализировать самостоятельно)
  • ✔ База весит меньше 5 КБ
  • ✔ Не тянет зависимости
  • ✔ Максимально документированный код

Начало использования

Добавьте пакет в зависимости проекта

composer require webmasterskaya\ProductionCalendar

Как работает

Класс Calendar реализует паттерн singletone. Любой вызов статичного метода приводит к инициализации экземпляра класса, если он ещё не был инициализирован. Все последующие вызовы будут работать с этим экземпляром.

Проверка дат осуществляется перемещением внутреннего указателя. При инициализации класса, указатель устанавливается на дату, переданную в аргументах метода. Если аргумент даты равен null, то указатель не смещается и используется последнее его положение.

Проверить текущее положение указателя можно, вызвав метод date():

use \Webmasterskaya\ProductionCalendar\Calendar;

Calendar::date(); // вернёт объект \DateTime, на который установлен внутренний указатель класса

Основные понятия

  • Рабочий день (isWorking() === true) - день, в который однозначно работают.
  • Выходной день (isWeekend() === true) - день, в который однозначно не работают (праздник, суббота и воскресение, кроме рабочих суббот).
  • Праздничный день (isHoliday() === true) - день, в который однозначно никто не работает, т.к. это праздник (Новый Год, День Победы).
  • Предпраздничный день (isPreHoliday() === true) - день, в который продолжительность работы сокращается на один час.
  • Нерабочий день (isNoWorking() === true) - в 2020 году появилось новое определение "Нерабочий день". Нерабочие дни введены в соответствии с Указами Президента РФ от 25.03.2020 N 206, от 02.04.2020 N 239, от 28.04.2020 N 294, от 29.05.2020 N 345, от 23.04.2021 N 242

Примеры использования

В примерах использования используются следующие аргументы:

  • $date (null|string|int|\DateTime) - дата, на которую будет установлен указатель.
    • При значении null проверка будет осуществляться от последней даты под курсором. Если под курсором нет даты, проверка начнётся от текущей даты.
    • При передаче даты, как string, необходимо использовать корректный формат даты. Пояснение даёт раздел «Форматы даты и времени».
  • $weekend (array) - Массив с номерами дней, которые считаются выходными (0 - воскресенье, 6 - суббота). По умолчанию: [6, 0].
  • $format (string) - Формат результирующей строки даты. Подробнее: https://www.php.net/manual/datetime.format.php. По умолчанию: Y-m-d

Варианты объявления $date:

$date = '06.05.2020'; // Строкой
$date = '2020-05-13'; // Строкой в другом формате
$date = 1582146000; // Unix Timestamp 
$date = new \DateTime('05.11.2020'); // Объект \DateTime

Проверка конкретной даты

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

Calendar::isWorking($date, [6, 0]); //bool
/* или */
Calendar::isWorking($date); //bool
/* или */
Calendar::isWorking(); //bool

Является ли день праздничным

Calendar::isHoliday($date); //bool
/* или */
Calendar::isHoliday(); //bool

Является ли день предпраздничным

Calendar::isPreHoliday($date); //bool
/* или */
Calendar::isPreHoliday(); //bool

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

Calendar::isNoWorking($date); //bool
/* или */
Calendar::isNoWorking(); //bool

Поиск по дате

Найти ближайший рабочий день, за указанной датой.

Calendar::find($date)->working()->format($format); //string

Найти ближайший выходной день, за указанной датой.

Calendar::find($date)->holiday()->format($format); //string

Найти ближайший предпраздничный день, за указанной датой.

Calendar::find($date)->preHoliday()->format($format); //string

Найти ближайший нерабочий день, за указанной датой.

Calendar::find($date)->noWorking()->format($format); //string

Получить список дат

Получить список всех выходных дней за указанный промежуток дат

Calendar::getHolidaysListByInterval($date_from, $date_to, $format); //array

Получить список всех рабочих дней за указанный промежуток дат

Calendar::getWorkingListByInterval($date_from, $date_to, $format); //array

Получить список всех нерабочих дней за указанный промежуток дат

Calendar::getNoWorkingListByInterval($date_from, $date_to, $format); //array

Получить список всех предпраздничных дней за указанный промежуток дат

Calendar::getPreHolidayListByInterval($date_from, $date_to, $format); //array

Описание методов класса Updater

Обновить данные за указанный год

Updater::update($year); //void

Обновить все данные, начиная с 2013 года и до текущего

Updater::updateAll(); //void

Обновление справочника дат

composer calendar-update  # обновит данные за текущий год
composer calendar-update 2024 # обновит данные за указанный год
composer calendar-update all # обновит все данные за промежуток с 2013 по текущий год