strtotime

(PHP 4, PHP 5)

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

Описание

int strtotime ( string $time [, int $now = time() ] )

Первым параметром функции должна быть строка с датой на английском языке, которая будет преобразована в метку времени 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-дневный период относительной текущей даты/времени, а не как недельный период от понедельника (Monday) до воскресенья (Sunday).
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

Теперь ошибки, связанные с временными зонами, генерируют ошибки уровня E_STRICT и E_NOTICE.

5.0.2 В PHP 5 до версии 5.0.2 "now" и другие относительные времена вычислялись неверно относительно полуночи текущего дня. Это отличается от поведения текущих версий, где вычисление производится корректно относительно текущего времени.
5.0.0 Стало возможным указывать микросекунды, но они не принимаются во внимание и будут проигнорированы.
4.4.0 В версиях PHP до 4.4.0 фраза "next" некорректно вычислялась как +2. Типичное решение этой проблемы - использовать "+1".

Примеры

Пример #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-битового знакового целого). Кроме того, не все платформы поддерживают отрицательные метки времени, поэтому поддерживаемый диапазон дат может быть ограничен Эпохой Unix. Это означает, что даты ранее 1 января 1970 г. не будут работать в Windows, некоторых дистрибутивах Linux и нескольких других операционных системах. Тем не менее, в версиях PHP 5.1 и старше это ограничено было снято.

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

Замечание:

Даты в формате m/d/y или d-m-y разрешают неоднозначность с помощью анализа разделителей их элементов: если разделителем является слэш (/), то дата интерпретируется в американском формате m/d/y, если же разделителем является дефис (-) или точка (.), то подразумевается использование европейского форматаd-m-y.

Чтобы избежать потенциальной неоднозначности, рекомендуется использовать даты в формате стандарта ISO 8601 (YYYY-MM-DD) либо пользоваться функцией DateTime::createFromFormat() там, где это возможно.

Замечание:

Не рекомендуется использовать эту функцию для математических операций. Целесообразней использовать DateTime::add() и DateTime::sub() начиная с PHP 5.3, или DateTime::modify() в PHP 5.2.

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

  • Форматы даты и времени
  • DateTime::createFromFormat() - Создает и возвращает экземпляр класса DateTime, соответствующий заданному формату
  • checkdate() - Проверяет корректность даты по григорианскому календарю
  • strptime() - Разбирает строку даты/времени сгенерированную функцией strftime

Коментарии

Автор:
Be careful when using two numbers as the year. I came across this situation:

<?php

echo strtotime('24.11.22');
echo 
date('d.m.Y H:i:s'1669324282)  .  "\n\n";

// But
echo strtotime('24.11.2022');
echo 
date('d.m.Y H:i:s'1669237200);

?>

Output:

1669324282
25.11.2022 00:11:22

1669237200
24.11.2022 00:00:00
2023-03-17 17:39:01
http://php5.kiev.ua/manual/ru/function.strtotime.html
Be aware of this: 1 month before the 31st day, it will return the same month:

<?php
echo date('m'strtotime('2023-05-30 -1 month')) ; //returns 04
echo date('m'strtotime('2023-05-31 -1 month')) ; //returns 05, not 04
?>

So, don't use this to operate on the month of the result.
A better way to know what month was the previous month would be:

<?php
//considering today is 2023-05-31...

$firstOfThisMonth date('Y-m') . '-01'//returns 2023-05-01
echo date('m'strtotime($firstOfThisMonth ' -1 month')) ; //returns 04
?>
2023-06-01 01:02:57
http://php5.kiev.ua/manual/ru/function.strtotime.html
> The Unix timestamp that this function returns does not contain information about time zones. In order to do calculations with date/time information, you should use the more capable DateTimeImmutable.

important - does not contain

<?php
date_default_timezone_set
('Europe/Berlin');

// ....  a lot of code 

echo $a strtotime('yesterday 00:00');

// in $a hour = 23:00:00 and you may not know about it
// https://onlinephp.io/c/ef696
// use DateTimeImmutable
2024-03-25 11:25:27
http://php5.kiev.ua/manual/ru/function.strtotime.html
Not sure why, but 
<?php
echo strtotime("+2 hours"), "\n";
echo 
strtotime("+2 hrs"), "\n";
echo 
strtotime("+2 hourss"), "\n";
?>

are returning +2 hours, -2 hours, +8 hours. The latter two should be errors instead.
2024-10-14 21:46:57
http://php5.kiev.ua/manual/ru/function.strtotime.html

    Поддержать сайт на родительском проекте КГБ