strtotime

(PHP 4, PHP 5, PHP 7, PHP 8)

strtotimeПреобразовывает текстовое представление даты на английском языке в метку времени Unix

Описание

strtotime(string $datetime, ?int $baseTimestamp = null): int|false

Первым параметром функция ожидает строку с датой на английском языке, которая будет преобразована в метку времени Unix (количество секунд, прошедших с 1 января 1970 года 00:00:00 UTC) относительно метки времени, переданной в параметр baseTimestamp, или текущего времени, если аргумент baseTimestamp опущен. Разбор строки даты определён в разделе «Форматы даты и времени» и содержит несколько тонких вопросов. Знание форматов упростит работу с функцией.

Внимание

Метка времени Unix, которую возвращает функция, не содержит данных о часовых поясах. Для расчётов с датой/временем обращаются к инструменту с бо́льшими способностями — классу DateTimeImmutable.

Каждый параметр функции будет использовать часовой пояс по умолчанию, если он не указан в нём. Соблюдают осторожность и не указывают разные метки времени в параметрах, если только так не было задумано. О способах установки часового пояса по умолчанию рассказано в описании функции date_default_timezone_get().

Список параметров

datetime

Строка даты и времени. Объяснение корректных форматов даёт раздел «Форматы даты и времени».

baseTimestamp

Метка времени, которую функция будет использовать как основу для вычисления относительных дат.

Возвращаемые значения

Функция возвращает метку времени, если выполнилась успешно, иначе значение false.

Ошибки

Каждый вызов функции для работы с датой и временем генерирует ошибку уровня E_WARNING при неправильных настройках часового пояса. Смотрите также описание функции date_default_timezone_set().

Список изменений

Версия Описание
8.0.0 Параметр baseTimestamp теперь принимает значение null.

Примеры

Пример #1 Пример разбора англоязычного текстового описания даты и времени функцией strtotime()

<?php

echo strtotime("now"), "\n";
echo
strtotime("10 September 2000"), "\n";
echo
strtotime("+1 day"), "\n";
echo
strtotime("+1 week"), "\n";
echo
strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
echo
strtotime("next Thursday"), "\n";
echo
strtotime("last Monday"), "\n";

Пример #2 Проверка ошибок

<?php

$str
= 'Not Good';

if ((
$timestamp = strtotime($str)) === false) {
echo
"Строка ($str) недопустима";
} else {
echo
"$str == " . date('l dS \o\f F Y h:i:s A', $timestamp);
}

Примечания

Замечание:

«Относительная» дата в этом случае также означает, что если конкретный компонент метки даты и времени не указали, функция возьмёт его дословно из параметра baseTimestamp. Поэтому вызов strtotime('February') при запуске 31 мая 2022 года функция интерпретирует как 31 февраля 2022, что перенесётся в метку времени 3 марта, а в високосный год — 2 марта. Вызов strtotime('1 February') или strtotime('first day of February') не допустит этой проблемы.

Замечание:

При двузначном указании количества лет значения 00-69 функция интерпретирует как 2000-2069, а 70-99 — 1970-1999. Замечания ниже рассказывают о возможных различиях на 32-битных системах (допустимые даты заканчиваются 2038-01-19 03:14:07).

Замечание:

Корректный диапазон меток времени 32-битного целого числа со знаком — даты с 13 декабря 1901 20:45:54 по времени UTC по 19 января 2038 03:14:07 по времени UTC.

В 64-битных версиях PHP корректный диапазон меток времени практически бесконечен, поскольку 64 бита справляются с представлением около 293 миллиардов лет в обоих направлениях.

Замечание:

Использовать функцию для математических операций не рекомендуется. Лучше вызывать методы DateTime::add() и DateTime::sub().

Смотрите также