Как получить числовое значение даты в PHP: от strtotime до DateTime
Основные способы преобразования даты в число
В PHP число, представляющее дату, чаще всего является целым количеством секунд, прошедших с 1 января 1970 года (Unix timestamp). Ниже рассмотрены основные методы получения такого числа из строкового представления даты или объекта DateTime.
Самый распространённый способ - функция strtotime
Функция strtotime принимает текстовую дату и возвращает Unix timestamp. Если строка не распознаётся, возвращается false.
$timestamp = strtotime('2025-03-15 14:30:00');
var_dump($timestamp);Php дата число (преобразование даты в число в php)
int(1742567400)
Пояснение
Функция анализирует строку и преобразует её в timestamp. Удобно для простых форматов ISO или английских фраз ("next Monday"). Проблемы возникают с нестандартными строками или при указании часового пояса, отличного от системного. Рекомендуется всегда проверять результат на false.
Типичная ошибка
Если строка содержит неверный формат (например, "15.03.2025" вместо "2025-03-15"), strtotime может вернуть неожиданный результат или false. Решение - перед использованием преобразовать строку к стандартному формату или применить DateTime::createFromFormat.
Как преобразовать объект DateTime в число?
Метод getTimestamp() возвращает Unix timestamp для существующего экземпляра DateTime.
$date = new DateTime('2025-03-15 14:30:00');
$timestamp = $date->getTimestamp();
echo $timestamp;
1742567400
Этот способ предпочтительнее, если уже работаете с объектами DateTime. Ошибка может возникнуть, если объект создан с неверным часовым поясом - timestamp всегда считается от UTC, но сам объект учитывает смещение.
Как использовать mktime для ручного указания компонентов даты?
Функция mktime(час, минута, секунда, месяц, день, год) создаёт timestamp по заданным числам.
$timestamp = mktime(14, 30, 0, 3, 15, 2025);
echo $timestamp;
1742567400
Полезна, когда дата известна по частям. Типичная ошибка - перепутать порядок аргументов. Также mktime корректирует некорректные значения (например, 13 месяц становится январем следующего года).
Как получить timestamp из строки с явным форматом?
Метод DateTime::createFromFormat позволяет задать точный формат входной строки, что исключает неверное толкование.
$date = DateTime::createFromFormat('d.m.Y H:i:s', '15.03.2025 14:30:00');
$timestamp = $date->getTimestamp();
echo $timestamp;
1742567400
Подходит для нестандартных локализованных форматов. Если строка не соответствует формату, createFromFormat возвращает false. Важно указывать все необходимые части даты и времени.
Как преобразовать дату в число с высокой точностью (микросекунды)?
Для микросекунд используется класс DateTime, в котором можно установить микросекунды, или функция microtime с параметром true.
$date = DateTime::createFromFormat('U.u', '1742567400.123456');
echo $date->format('U.u');
1742567400.123456
Метод format('U') возвращает целое число секунд, а 'U.u' - дробное. Полезно для логирования событий с высокой точностью.
Расширенные примеры преобразования даты в число
Пример 1. Преобразование даты с учётом часового пояса
$date = new DateTime('2025-03-15 14:30:00', new DateTimeZone('Europe/Moscow'));
echo $date->getTimestamp();
1742567400
Timestamp всегда считается от UTC, поэтому результат корректен. При создании DateTime из строки с часовым поясом смещение учитывается автоматически. Важно установить нужный часовой пояс до вызова getTimestamp.
Пример 2. Вычисление возраста по дате рождения в числе дней
$birth = new DateTime('1990-05-20');
$diff = $birth->diff(new DateTime('now'));
$days = (int)$diff->format('%a');
echo "Возраст: $days дней";
Возраст: 12734 дней
Здесь diff возвращает объект DateInterval, из которого извлекается количество полных дней. Альтернативный подход - сравнить timestamp.
Пример 3. Конвертация даты из базы данных (формат MySQL DATETIME)
$mysqlDate = '2025-03-15 14:30:00';
$timestamp = strtotime($mysqlDate);
echo $timestamp;
1742567400
Это стандартный формат, который strtotime понимает без проблем. Если база данных хранит дату в другом формате, используйте createFromFormat с соответствующим шаблоном.
Пример 4. Работа с датами до 1970 года (32-битные системы)
$date = new DateTime('1950-01-01');
echo $date->getTimestamp();
-630921600
На 64-битных системах отрицательные timestamp поддерживаются. На 32-битных PHP может вернуть false или некорректное значение. В таких случаях лучше хранить дату как строку или использовать библиотеки, расширяющие диапазон.
Пример 5. Получение числа миллисекунд с микросекундной точностью
$microtime = microtime(true); // float: секунды.микросекунды
$milliseconds = (int)($microtime * 1000);
echo $milliseconds;
1742567400123
Подходит для генерации уникальных идентификаторов или замеров времени выполнения. Точность зависит от операционной системы.
Пример 6. Преобразование даты из строки с произвольным разделителем
$format = 'Y/m/d H-i-s';
$str = '2025/03/15 14-30-00';
$date = DateTime::createFromFormat($format, $str);
if ($date) {
echo $date->getTimestamp();
} else {
echo 'Ошибка формата';
}
1742567400
Позволяет обрабатывать нестандартные строки. Всегда проверяйте, что объект создан успешно.