Дата и время в PHP: функция date() и её возможности
Основы функции date()
Функция date() в PHP позволяет форматировать временную метку (Unix timestamp) в строку даты и времени. Если метка не указана, используется текущее время сервера. Рассмотрим базовое применение и различные варианты.
Базовое использование
Самый простой способ вывести текущую дату и время:
echo date('Y-m-d H:i:s');Php дата в timestamp (преобразование даты в timestamp в php)
Результат (пример):
2025-02-23 14:30:00
функция дата php (функция date() в php)
Символы формата: Y - год (4 цифры), m - месяц (01-12), d - день (01-31), H - часы (00-23), i - минуты (00-59), s - секунды (00-59).
Варианты использования
Как вывести дату в российском формате дд.мм.гггг?
echo date('d.m.Y');Php сравнение дат (сравнение дат в php)
Результат:
23.02.2025
прибавить к дате php (прибавление дней к дате в php)
Ошибка: неправильный порядок символов, например date('Y.d.m') даст 2025.23.02, что не соответствует ожиданиям.
Как получить вчерашнюю или завтрашнюю дату?
echo date('Y-m-d', strtotime('-1 day'));
echo date('Y-m-d', strtotime('+1 week'));дата php mysql (дата в php и mysql)
strtotime преобразует относительное выражение в timestamp. Результат для текущей даты 2025-02-23:
2025-02-22 2025-03-02
Php разница дат (разница между датами в php)
Проблема: при переводе часов или переходе на летнее время strtotime может дать неверный результат. Для точных операций лучше использовать DateTime.
Как учесть часовой пояс?
date_default_timezone_set('Europe/Moscow');
echo date('Y-m-d H:i:s');Php дата в строку (преобразование даты в строку в php)
Или с помощью объекта DateTime:
$date = new DateTime('now', new DateTimeZone('Asia/Vladivostok'));
echo $date->format('Y-m-d H:i:s');Php дата между (проверка даты между двумя датами в php)
Результат будет соответствовать указанному часовому поясу.
Типичная ошибка: забыть установить часовой пояс - тогда используется UTC, что может отличаться от локального времени.
Как вывести название месяца на русском языке?
setlocale(LC_TIME, 'ru_RU.UTF-8');
echo strftime('%d %B %Y', time());Php 7 дата (даты в php 7)
Или через IntlDateFormatter (рекомендуется):
$fmt = new IntlDateFormatter('ru_RU', IntlDateFormatter::LONG, IntlDateFormatter::NONE);
echo $fmt->format(time());Php дата год (получение года из даты в php)
Результат:
23 февраля 2025 г.
Php текущая дата (получение текущей даты в php)
Проблема: setlocale требует установленной локали на сервере, IntlDateFormatter требует расширения intl.
Как вывести дату из произвольной временной метки?
$timestamp = 1703293200; // 25 декабря 2023 00:00
echo date('d.m.Y H:i', $timestamp);Php date ru (php дата на русском)
Результат:
25.12.2023 00:00
Ошибка: передача некорректной метки (не число) приведет к warning и возврату false.
Расширенные примеры
Создание даты из компонентов
$timestamp = mktime(14, 30, 0, 12, 25, 2023); // 25.12.2023 14:30:00
echo date('Y-m-d H:i:s', $timestamp);Результат:
2023-12-25 14:30:00
Относительные даты через strtotime
echo date('Y-m-d', strtotime('last Sunday'));
echo date('Y-m-d', strtotime('first day of next month'));Результат (для 23.02.2025):
2025-02-23 (воскресенье) 2025-03-01
Сравнение двух дат по timestamp
$timestamp1 = strtotime('2025-01-01');
$timestamp2 = strtotime('2024-12-31');
if ($timestamp1 > $timestamp2) {
echo 'Первая дата позже';
} else {
echo 'Первая дата раньше или равна';
}Результат:
Первая дата позже
Форматирование с локализацией через IntlDateFormatter
$fmt = new IntlDateFormatter('ru_RU', IntlDateFormatter::FULL, IntlDateFormatter::SHORT);
echo $fmt->format(time());Результат:
воскресенье, 23 февраля 2025 г. 14:30
Микросекунды в дате
echo date('Y-m-d H:i:s.u'); // u - микросекундыРезультат:
2025-02-23 14:30:00.123456
Примечание: микросекунды могут быть нулевыми на многих системах.
Работа с DateTime и DateInterval
$date = new DateTime('2025-01-15');
$interval = new DateInterval('P1M');
$date->add($interval);
echo $date->format('Y-m-d');Результат:
2025-02-15
Формат ISO 8601
echo date(DATE_ISO8601); // предопределенная константаРезультат:
2025-02-23T14:30:00+0300
Создание даты из строки с проверкой
$date = date_create_from_format('d.m.Y', '25.12.2023');
if ($date) {
echo $date->format('Y-m-d');
} else {
echo 'Неверный формат';
}Результат:
2023-12-25