League Period: Как применить швейцарский нож интервалов в PHP
League Period — это библиотека‑«швейцарский нож» для работы с временными интервалами в PHP, позволяющая легко создавать, сравнивать и форматировать периоды за несколько строк кода.
League Period — это библиотека‑«швейцарский нож» для работы с временными интервалами в PHP, позволяющая создавать, сравнивать и форматировать периоды за 2‑3 строки кода. С её помощью вы сможете решить задачи от простого подсчёта дней до сложных бизнес‑правил, учитывающих праздничные дни и часовые зоны. Библиотека полностью совместима с PHP 8.2 и поддерживает типизацию, что делает её безопасной для продакшн‑проектов в 2026 году.
Как установить League Period в проект?
Установить библиотеку можно одной командой Composer, что занимает менее минуты.
- Откройте терминал в корне проекта.
- Выполните
composer require league/period. - Убедитесь, что в
composer.jsonпоявилась запись "league/period": "^3.0". - Запустите
composer installи проверьте автозагрузку.
После установки вы сразу получаете доступ к классам Period и DatePeriod, которые покрывают более 95 % типовых сценариев работы с датами.
Почему League Period лучше встроенных функций PHP?
Библиотека предоставляет единый API для операций, которые в чистом PHP требуют комбинации DateTime, DateInterval и сложных расчётов.
- Поддержка рабочих дней и праздничных календарей без сторонних пакетов.
- Встроенные методы
contains(),overlaps()иdiff()работают с точностью до микросекунд. - Автоматическое приведение к нужной часовой зоне, что экономит до 30 % кода в проектах с международными пользователями.
- Тестовое покрытие 99 % гарантирует стабильность в продакшн‑среде 2026 года.
Что делать, если нужно посчитать количество рабочих дней между двумя датами?
Для расчёта рабочих дней используйте класс Period совместно с CarbonPeriod и передайте массив праздничных дат.
- Создайте объект периода:
$period = new \League\Period\Period('2026-01-01', '2026-01-31'); - Определите массив праздников, например:
$holidays = ['2026-01-01', '2026-01-07']; - Вызовите метод
$period->businessDays($holidays)— получите 21 рабочий день. - Если необходимо вывести результат в рублях, умножьте количество дней на ставку, например
21 * 1500 = 31 500 ₽.
Как сравнить два периода и определить их пересечение?
Метод overlaps() сразу возвращает true или false, а intersection() выдаёт новый объект периода.
- Создайте первый период:
$p1 = new Period('2026-03-10', '2026-03-20'); - Создайте второй период:
$p2 = new Period('2026-03-15', '2026-03-25'); - Проверьте пересечение:
$p1->overlaps($p2) // true - Получите общую часть:
$common = $p1->intersection($p2); // 2026-03-15 – 2026-03-20 - Для бизнес‑логики вы можете вычислить процент пересечения:
(5 / 10) * 100 = 50 %.
Что делать, если требуется вывести период в пользовательском формате?
Метод format() поддерживает любые шаблоны DateTime::format, включая локализованные строки.
- Пример:
$period->format('d.m.Y') // 10.03.2026 – 20.03.2026 - Для вывода в виде «10 марта 2026 г. – 20 марта 2026 г.» используйте
strftime('%e %B %Y')с установленной локальюru_RU. - Если нужен вывод в виде «10‑20 марта 2026», комбинируйте два вызова
format()и склейте строки. - В 2026 году более 80 % компаний используют такие форматы в email‑рассылках, повышая открываемость на 12 %.
Воспользуйтесь бесплатным инструментом League Period на toolbox-online.ru — работает онлайн, без регистрации.
Теги