Работа с датами в PHP: полный обзор популярных библиотек

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Работа с датами в PHP: библиотеки и инструменты

Работа с датами и временем — одна из самых частых задач в веб-разработке. В PHP есть встроенный класс DateTime, но его функционала часто не хватает для сложных операций: вычисления разницы во времени, форматирования с учётом локали, работы с временными зонами. На помощь приходят специализированные библиотеки. В этой статье мы разберём лучшие инструменты для работы с датами в PHP.

1. Встроенный класс DateTime

Прежде чем переходить к сторонним библиотекам, стоит вспомнить о нативном решении — классе DateTime. Он доступен в PHP с версии 5.2 и предоставляет базовый функционал:

  • Создание объектов даты и времени
  • Форматирование (через format())
  • Изменение даты (через modify())
  • Работа с временными зонами (DateTimeZone)
  • Сравнение дат

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

<?php
$date = new DateTime('2024-12-31');
$date->modify('+1 day');
echo $date->format('Y-m-d'); // 2025-01-01
?>

Однако у DateTime есть недостатки: отсутствие удобных методов для работы с интервалами, сложности с цепочками вызовов и ограниченная поддержка человекочитаемых форматов.

2. Carbon — самая популярная библиотека

Carbon — это расширение для DateTime, которое добавляет удобный API, цепочки методов и множество вспомогательных функций. Установка через Composer:

composer require nesbot/carbon

Ключевые возможности Carbon:

  • Человекочитаемые методы: now(), yesterday(), tomorrow()
  • Локализация (поддержка русского языка)
  • Работа с интервалами: diffForHumans()
  • Изменение даты через цепочки: ->addDays(5)->subMonths(2)
  • Сравнение: isWeekend(), isPast(), isFuture()

Пример с русской локализацией:

<?php
require 'vendor/autoload.php';
use Carbon\Carbon;

Carbon::setLocale('ru');
$date = Carbon::now();
echo $date->diffForHumans(); // "только что" или "3 часа назад"
?>

Carbon — стандарт де-факто для работы с датами в Laravel и многих других проектах.

3. Chronos — лёгкая альтернатива

Chronos от CakePHP — это ещё одно расширение DateTime, но с фокусом на лёгкость и производительность. Установка:

composer require cakephp/chronos

Отличия от Carbon:

  • Нет зависимостей (кроме PHP)
  • Более строгая типизация
  • Поддержка неизменяемых (immutable) объектов по умолчанию
  • Меньше методов, но основные присутствуют

Пример:

<?php
use Cake\Chronos\Chronos;

$date = Chronos::now();
$future = $date->addDays(10);
echo $future->format('d.m.Y');
?>

Chronos хорош для проектов, где важна чистота кода и производительность, но не нужна обширная экосистема.

4. CarbonImmutable и DateTimeImmutable

Начиная с PHP 5.5, появился класс DateTimeImmutable, который не изменяет исходный объект, а возвращает новый. В Carbon есть аналог — CarbonImmutable. Это предотвращает случайные мутации данных:

<?php
use Carbon\CarbonImmutable;

$date = CarbonImmutable::now();
$newDate = $date->addDay();
echo $date->format('Y-m-d'); // Оригинал не изменился
?>

Используйте immutable-версии, если даты передаются между функциями или хранятся в кэше.

5. League\Period — работа с периодами

Библиотека Period от The League of Extraordinary Packages предназначена для работы с временными интервалами и периодами. Установка:

composer require league/period

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

<?php
use League\Period\Period;

$period = Period::fromDate('2024-01-01                    

Рекомендаций