strtotime
(PHP 4, PHP 5, PHP 7, PHP 8)
strtotime — Преобразовывает текстовое представление даты на английском языке в метку времени Unix
Описание
Первым параметром функция ожидает строку с датой на английском языке, которая
будет преобразована в метку времени Unix (количество секунд, прошедших с 1 января 1970
года 00:00:00 UTC) относительно метки времени, переданной
в параметр baseTimestamp, или текущего времени, если аргумент
baseTimestamp опущен.
Разбор строки даты определён в разделе «Форматы даты и времени»
и содержит несколько тонких вопросов. Знание форматов упростит работу с функцией.
Внимание
Метка времени Unix, которую возвращает функция, не содержит данных
о часовых поясах. Для расчётов с датой/временем
обращаются к инструменту с бо́льшими способностями — классу DateTimeImmutable.
Каждый параметр функции будет использовать часовой пояс по умолчанию,
если он не указан в нём. Соблюдают осторожность и не указывают разные
метки времени в параметрах, если только так не было задумано.
О способах установки часового пояса по умолчанию рассказано в описании функции
date_default_timezone_get().
Список параметров
datetime
-
Строка даты и времени. Объяснение корректных форматов даёт раздел «Форматы даты и времени».
baseTimestamp
-
Метка времени, которую функция будет использовать как основу для вычисления
относительных дат.
Возвращаемые значения
Функция возвращает метку времени, если выполнилась успешно, иначе значение false.
Ошибки
Каждый вызов функции для работы с датой и временем генерирует ошибку уровня E_WARNING
при неправильных настройках часового пояса. Смотрите также описание функции
date_default_timezone_set().
Примеры
Пример #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().