(PHP 4, PHP 5, PHP 7)
strtotime — Преобразует текстовое представление даты на английском языке в метку времени Unix
$time
[, int $now
= time()
] ) : int
Первым параметром функции должна быть строка с датой на английском языке, которая
будет преобразована в метку времени Unix (количество секунд, прошедших с 1 января 1970
года 00:00:00 UTC) относительно метки времени, переданной в
now
, или текущего времени, если аргумент
now
опущен.
Каждый параметр функции использует временную метку по умолчанию, пока она не указана в этом параметре напрямую. Будьте внимательны и не используйте различные временные метки в параметрах, если на то нет прямой необходимости. Обратите внимание на date_default_timezone_get() для задания временной зоны различными способами.
time
Строка даты/времени. Объяснение корректных форматов дано в разделе Форматы даты и времени.
now
Временная метка, используемая в качестве базы для вычисления относительных дат.
Возвращает временную метку в случае успеха, иначе возвращается FALSE
.
До версии PHP 5.1.0 в случае ошибки эта функция возвращала -1.
Каждый вызов к функциям даты/времени при неправильных настройках временной зоны сгенерирует ошибку уровня E_NOTICE
,
и/или ошибку уровня E_STRICT
или E_WARNING
при использовании системных
настроек или переменной окружения TZ. Смотрите также date_default_timezone_set()
Версия | Описание |
---|---|
5.3.0 |
До PHP 5.3.0 относительные форматы времени, заданные в аргументе
time функции strtotime(),
такие как this week, previous week,
last week и next week, интерпретировались как
7-ми дневный период относительно текущего значения даты/времени, а не как период
с Понедельника по Воскресенье.
|
5.3.0 |
До PHP 5.3.0 24:00 не являлся корректным
форматом, и при его использовании strtotime() возвращала FALSE .
|
5.2.7 | В версиях PHP 5 до 5.2.7 при запросе временной метки дня недели, являвшегося первым днем месяца, ошибочно прибавлялась одна неделя. Эта ошибка была исправлена в версии 5.2.7 и следующих за ней версиях. |
5.1.0 |
Теперь в случае ошибки возвращается FALSE вместо
-1.
|
5.1.0 |
Теперь ошибки, связанные с временными зонами, генерируют ошибки уровня |
5.0.2 | В PHP до версии 5.0.2 "now" и другие относительные времена вычислялись неверно относительно полуночи текущего дня. Это отличается от поведения текущих версий, где вычисление производится корректно относительно текущего времени. |
5.0.0 | Стало возможным указывать микросекунды, но они не принимаются во внимание и будут проигнорированы. |
Пример #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';
// до PHP 5.1.0 вместо false необходимо было сравнивать со значением -1
if (($timestamp = strtotime($str)) === false) {
echo "Строка ($str) недопустима";
} else {
echo "$str == " . date('l dS \o\f F Y h:i:s A', $timestamp);
}
?>
Замечание:
Если количество лет указано двумя цифрами, то значения 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-битового знакового целого).
Кроме того, до PHP 5.1.0, не все платформы поддерживают отрицательные метки времени, поэтому поддерживаемый диапазон дат может быть ограничен эпохой Unix. Это означает, что даты ранее 1 января 1970 г. не будут работать в Windows, некоторых дистрибутивах Linux и нескольких других операционных системах.
В 64-битных версиях PHP корректный диапазон временных меток фактически бесконечен, так как 64 битов хватит для представления приблизительно 293 миллиарда лет в обоих направлениях.
Замечание:
Даты в формате m/d/y или d-m-y разрешают неоднозначность с помощью анализа разделителей их элементов: если разделителем является слеш (/), то дата интерпретируется в американском формате m/d/y, если же разделителем является дефис (-) или точка (.), то подразумевается использование европейского формата d-m-y. Однако, если, год указан в двухзначном формате, а разделителем является дефис (-), строка даты интерпретируется как y-m-d.
Чтобы избежать потенциальной неоднозначности, рекомендуется использовать даты в формате стандарта ISO 8601 (YYYY-MM-DD), либо пользоваться функцией DateTime::createFromFormat() там, где это возможно.
Замечание:
Не рекомендуется использовать эту функцию для математических операций. Целесообразно использовать DateTime::add() и DateTime::sub() начиная с PHP 5.3, или DateTime::modify() в PHP 5.2.