strtotime
(PHP 4, PHP 5)
strtotime — Преобразует текстовое представление даты на английском языке в метку времени Unix
Описание
Первым параметром функции должна быть строка с датой на английском языке, которая будет преобразована в метку времени относительно метки времени, переданной в now , или текущего времени, если аргумент now опущен. В случае ошибки возвращается -1.
Функция strtotime() использует GNU формат даты, поэтому рекомендуется ознакомиться с руководством GNU » Date Input Formats, где описывается синтаксис аргумента time .
Пример #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)) === -1) {
echo "Строка ($str) недопустима";
} else {
echo "$str == " . date('l dS of F Y h:i:s A', $timestamp);
}
?>
Замечание: Для большинства систем допустимыми являются даты с 13 декабря 1901, 20:45:54 GMT по 19 января 2038, 03:14:07 GMT. (Эти даты соответствуют минимальному и максимальному значению 32-битового целого со знаком). Для Windows допустимы даты с 01-01-1970 по 19-01-2038. Не все платформы поддерживают отрицательные метки времени, поэтому даты ранее 1 января 1970 г. не поддерживаются в Windows, некоторых версиях Linux и некоторых других операционных системах.
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения для работы с датой и временем
- Дата и Время
- checkdate
- date_add
- date_create_from_format
- date_create_immutable_from_format
- date_create_immutable
- date_create
- date_date_set
- date_default_timezone_get
- date_default_timezone_set
- date_diff
- date_format
- date_get_last_errors
- date_interval_create_from_date_string
- date_interval_format
- date_isodate_set
- date_modify
- date_offset_get
- date_parse_from_format
- date_parse
- date_sub
- date_sun_info
- date_sunrise
- date_sunset
- date_time_set
- date_timestamp_get
- date_timestamp_set
- date_timezone_get
- date_timezone_set
- date
- getdate
- gettimeofday
- gmdate
- gmmktime
- gmstrftime
- idate
- localtime
- microtime
- mktime
- strftime
- strptime
- strtotime
- time
- timezone_abbreviations_list
- timezone_identifiers_list
- timezone_location_get
- timezone_name_from_abbr
- timezone_name_get
- timezone_offset_get
- timezone_open
- timezone_transitions_get
- timezone_version_get
Коментарии
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
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
?>
> 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
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.