webmasterskaya / production-calendar
Production calendar of Russian Federation
Requires
- php: >=7.4
- ext-curl: *
- ext-dom: *
- ext-json: *
- ext-libxml: *
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.68
- phpunit/phpunit: ^9.6
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 по текущий год