← Назад к вопросам

Какие знаешь функции для работы с датой?

1.3 Junior🔥 161 комментариев
#PHP Core

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Основные функции для работы с датами в PHP

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

1. Функции на основе временных меток (timestamp)

Временная метка — количество секунд, прошедших с 1 января 1970 года (эпоха Unix).

  • time() — возвращает текущую метку времени
  • mktime($hour, $minute, $second, $month, $day, $year) — создает метку для указанной даты
  • strtotime($datetime_string, $base_timestamp) — преобразует текстовое представление даты в метку
$now = time(); // Текущее время
$specific = mktime(15, 30, 0, 12, 31, 2023); // 31 декабря 2023, 15:30:00
$next_week = strtotime('+1 week'); // Через неделю от текущего момента

2. Форматирование дат

  • date($format, $timestamp) — форматирует метку времени согласно переданному формату
  • strftime($format, $timestamp) — похожа на date(), но учитывает локальные настройки (устарела с PHP 8.1)
  • gmdate($format, $timestamp) — то же что date(), но для времени по Гринвичу
echo date('Y-m-d H:i:s'); // 2023-12-31 15:30:00
echo date('d.m.Y', $specific); // 31.12.2023

3. Объектно-ориентированный подход (DateTime)

С PHP 5.2 появился более современный объектно-ориентированный API:

  • DateTime — основной класс для работы с датами
  • DateTimeImmutable — неизменяемая версия (рекомендуется для избежания side effects)
  • DateInterval — представляет интервал времени
  • DatePeriod — представляет период для итерации
  • DateTimeZone — работа с временными зонами
// Создание объектов даты
$date = new DateTime('2023-12-31 15:30:00');
$immutable = new DateTimeImmutable('now');

// Форматирование
echo $date->format('Y-m-d H:i:s');

// Модификация
$modified = $date->modify('+1 day');
$interval = new DateInterval('P1W'); // Интервал 1 неделя
$date->add($interval);

// Работа с временными зонами
$tz = new DateTimeZone('Europe/Moscow');
$date = new DateTime('now', $tz);

4. Разбор и валидация дат

  • checkdate($month, $day, $year) — проверяет корректность даты
  • getdate($timestamp) — возвращает ассоциативный массив с компонентами даты
  • strptime($date_string, $format) — разбирает строку с датой согласно формату
  • DateTime::createFromFormat($format, $time_string) — создает объект DateTime из строки с произвольным форматированием
// Проверка даты
if (checkdate(2, 29, 2024)) {
    echo "29 февраля 2024 — корректная дата";
}

// Создание из произвольного формата
$date = DateTime::createFromFormat('d/m/Y', '31/12/2023');

5. Разница между датами и сравнение

  • date_diff($datetime1, $datetime2) — вычисляет разницу между двумя датами
  • В объектном стиле: $date1->diff($date2)
$date1 = new DateTime('2023-01-01');
$date2 = new DateTime('2023-12-31');
$interval = $date1->diff($date2);
echo $interval->format('%a дней'); // 364 дней

6. Временные зоны

  • date_default_timezone_set($timezone) — устанавливает временную зону по умолчанию
  • date_default_timezone_get() — получает текущую временную зону
  • timezone_identifiers_list() — список всех доступных временных зон
date_default_timezone_set('Europe/Moscow');
echo date_default_timezone_get(); // Europe/Moscow

7. Дополнительные полезные функции

  • microtime($get_as_float) — возвращает текущую метку с микросекундами
  • date_sun_info($timestamp, $latitude, $longitude) — информация о восходе/закате солнца
  • cal_days_in_month($calendar, $month, $year) — количество дней в месяце

Современные практики

В современном PHP рекомендуется использовать объектный подход (DateTime, DateTimeImmutable), так как он:

  • Более читаем и удобен для сложных операций
  • Лучше обрабатывает временные зоны
  • Меньше подвержен ошибкам (особенно DateTimeImmutable)
  • Поддерживает цепочки вызовов
// Современный подход
$date = (new DateTimeImmutable('now'))
    ->setTimezone(new DateTimeZone('UTC'))
    ->modify('+1 month')
    ->format(DateTimeInterface::ATOM);

Важные моменты для разработчика

  1. Временные зоны — всегда явно указывайте временную зону, не полагайтесь на настройки сервера
  2. Immutable vs Mutable — используйте DateTimeImmutable там, где дата не должна меняться
  3. Форматирование — используйте константы формата из DateTimeInterface для стандартизации
  4. Производительность — для простых операций со временем в прошлом/будущем strtotime() может быть быстрее объектов

Выбор конкретных функций зависит от задачи, но для новых проектов предпочтительнее объектно-ориентированный API как более надежный и выразительный.