Комментарии (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);
Важные моменты для разработчика
- Временные зоны — всегда явно указывайте временную зону, не полагайтесь на настройки сервера
- Immutable vs Mutable — используйте DateTimeImmutable там, где дата не должна меняться
- Форматирование — используйте константы формата из DateTimeInterface для стандартизации
- Производительность — для простых операций со временем в прошлом/будущем
strtotime()может быть быстрее объектов
Выбор конкретных функций зависит от задачи, но для новых проектов предпочтительнее объектно-ориентированный API как более надежный и выразительный.