PHP: как получить дату в виде числа? Unix timestamp, ГГГГММДД и другие варианты
Основные способы получения числового представления даты
Использование функции time()
Какой самый быстрый способ получить текущую дату в виде числа (unix timestamp)?
Функция time() возвращает количество секунд, прошедших с 1 января 1970 года 00:00:00 GMT (unix timestamp). Это наиболее производительный способ, не требующий создания объектов.
$now = time();
echo $now; // например, 1718981234Php форматирование даты (php: форматирование даты)
Типичная ошибка: путать time() с microtime(true). Первое возвращает целое число, второе - число с плавающей точкой. В 32-битных системах time() может выдать ошибку после 2038 года (проблема 2038).
Преобразование строки с датой в unix timestamp с помощью strtotime()
Как перевести текстовое описание даты (например, "next Monday") в числовой формат?
strtotime() парсит английскую строку и возвращает timestamp. Поддерживает относительные форматы.
$timestamp = strtotime('2025-06-21');
echo $timestamp; // 1750464000 (может отличаться в зависимости от timezone)Php дата день недели (php: получить день недели из даты)
Ошибка: если строка не распознана, возвращается false. Необходимо проверять результат функцией is_int() или явным сравнением с false. Также результат зависит от временной зоны, установленной в php.ini (date.timezone).
Использование DateTime::getTimestamp()
Как получить unix timestamp из объекта DateTime, созданного с определенным часовым поясом?
Объектно-ориентированный подход: создать экземпляр DateTime с указанием времени и часового пояса, затем вызвать getTimestamp().
$date = new DateTime('2025-06-21 10:00:00', new DateTimeZone('Europe/Moscow'));
echo $date->getTimestamp(); // 1750472400Php изменение даты (php: изменение даты (модификация))
Ошибка: при создании DateTime без явного часового пояса используется пояс из настроек PHP. Метод getTimestamp() всегда возвращает UTC timestamp, вне зависимости от временной зоны объекта. Некорректное указание строки может выбросить исключение.
Получение числового формата ГГГГММДД (целое число)
Как представить дату в виде восьмизначного числа без разделителей (например, 20250621)?
Функция date('Ymd') возвращает строку в формате ГГГГММДД. При неявном приведении к числу (int) она даёт целое число.
$ymd = (int) date('Ymd', time());
echo $ymd; // 20250621Php дата числом (php: получить дату в числовом формате)
Ошибка: если дата 2025-01-01, то результат 20250101 - ведущий ноль не пропадает, так как это строковое представление. При приведении к int ведущие нули отбрасываются, но это не влияет на числовое значение. Также метод не учитывает часовой пояс, если не передан второй аргумент timestamp.
День года в виде числа
Как получить номер дня от начала года (начиная с 0) в виде целого числа?
Формат 'z' возвращает day of year (0-365).
$dayOfYear = (int) date('z');
echo $dayOfYear; // 171 (для 21 июня 2025 года)
создание даты php (php: создание объекта даты)
Ошибка: високосные годы учитываются автоматически. Важно помнить, что отсчёт начинается с 0 (0 соответствует 1 января).
Unix timestamp с микросекундами
Как получить текущее время с точностью до микросекунд в виде числа с плавающей точкой?
Функция microtime(true) возвращает число с плавающей точкой, где целая часть - секунды, дробная - микросекунды.
$micro = microtime(true);
echo $micro; // 1718981234.5678
Ошибка: если передать false, вернётся строка вида "0.56780000 1718981234". Использование true гарантирует число. На 32-битных системах точность может снизиться из-за ограничений чисел с плавающей точкой.
Timestamp начала текущего дня
Как получить unix timestamp, соответствующий 00:00:00 сегодняшнего дня?
Используется strtotime('today') или (new DateTime('today'))->getTimestamp().
$startOfDay = strtotime('today');
echo $startOfDay; // 1718928000 (зависит от timezone)
Ошибка: в разных часовых поясах момент начала дня отличается. 'today' всегда берётся относительно текущей временной зоны. Если нужно UTC, используйте 'today UTC'.
Расширенные примеры получения числового представления даты
// 1. Создание DateTimeImmutable и получение timestamp
$date = new DateTimeImmutable('now', new DateTimeZone('UTC'));
echo $date->getTimestamp(); // текущий unixtimestamp в UTC
1718981234 (пример)
// 2. Преобразование строки с указанием часового пояса
$timestamp = (new DateTime('2025-12-31 23:59:59', new DateTimeZone('America/New_York')))->getTimestamp();
echo $timestamp;
1767229199 (пример, соответствует UTC)
// 3. Получение timestamp из формата 'd/m/Y' с помощью createFromFormat
$date = DateTime::createFromFormat('d/m/Y', '21/06/2025', new DateTimeZone('Europe/London'));
echo $date->getTimestamp();
1750456800 (пример, зависит от timezone)
// 4. Числовое представление в виде недели года (ISO 8601) с точностью до одного знака после запятой
$weekNumber = (int) date('W', time());
echo $weekNumber; // номер недели (1-53)
25 (пример)
// 5. Разница между двумя датами в секундах с использованием DateTime::diff и getTimestamp
$start = new DateTime('2025-01-01');
$end = new DateTime('2025-06-21');
$seconds = $end->getTimestamp() - $start->getTimestamp();
echo $seconds;
14918400 (пример)
// 6. Измерение времени выполнения скрипта с microtime(true)
$start = microtime(true);
// какой-то код
usleep(500000); // пауза 0.5 секунды
$end = microtime(true);
printf("Время: %.4f секунд", $end - $start);
Время: 0.5002 секунд
// 7. Получение timestamp конца дня (23:59:59) с помощью strtotime
$endOfDay = strtotime('tomorrow') - 1;
echo $endOfDay;
1719014399 (пример)
// 8. Использование intl для числового представления даты в формате 'yyyyMMdd' с учётом локали (но не числа)
$fmt = new IntlDateFormatter('ru_RU', IntlDateFormatter::LONG, IntlDateFormatter::NONE);
$timestamp = time();
$fmt->setPattern('yyyyMMdd');
echo $fmt->format($timestamp);
20250621