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

Список изменений

Версия Описание
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
13
Vyacheslav Belchuk
2 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
10
info at pipasjourney dot com
2 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
1
event at mail dot de
11 months 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
up
0
et dot coder at gmail dot com
1 year 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
To Top