Как получить числовое значение даты в PHP: от strtotime до DateTime

Раздел: Основы PHP -> Работа с датами

Основные способы преобразования даты в число

В 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

Позволяет обрабатывать нестандартные строки. Всегда проверяйте, что объект создан успешно.

Преобразование даты в число в PHP - comments

En
Php дата число (php)