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()
Примеры
Пример #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).
Замечание:
Корректным диапазоном временных меток обычно являются даты с 13 декабря
1901 20:45:54 UTC по 19 января 2038 03:14:07 UTC. (Эти даты
соответствуют минимальному и максимальному значению 32-битового
знакового целого).
В 64-битных версиях PHP корректный диапазон временных меток фактически бесконечен,
так как 64 битов хватит для представления приблизительно 293 миллиарда лет в обоих
направлениях.
Замечание:
Не рекомендуется использовать эту функцию для математических операций.
Целесообразно использовать DateTime::add() и
DateTime::sub().