LonghornPHP 2026

strtotime

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

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

Описание

function 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() .

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

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

Примечания пользователей 5 notes

up
14
Vyacheslav Belchuk
3 years ago
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
up
7
info at pipasjourney dot com
3 years ago
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
?>
up
3
elsiland at yahoo dot com
1 year ago
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.
up
3
et dot coder at gmail dot com
2 years ago
> 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
up
-1
event at mail dot de
1 year ago
'timestamp_sdt' for counting from zero hours of a specific day
<?php 
echo $timestamp_sdt = strtotime(date('d.m.Y',time()).'00.00.00')*1000; echo '<br><br>';
echo date('d.m.Y H.i.s', $timestamp_sdt/1000); echo '<br><br>';
?>

will give out:
1734649200000
20.12.2024 00.00.00
+Добавить

AltStyle によって変換されたページ (->オリジナル) /