Получение даты и времени в PHP. Функция date
В этой статье будет рассмотрено, как работать с датой и временем в языке программирования PHP. Также читатель узнает о таких функциях для работы со временем, как date() , time() и mktime() .
Вместо предисловия
Среди задач, с которыми регулярно сталкивается программист, очень часто встречаются разнообразные манипуляции с датами (dates) и временем (time). Никто не будет спорить с тем, что эти значения (символы, параметры) чрезвычайно важны. И база данных, и любая цифровая автоматизированная система не способны корректно работать, если нет точного времени, а также если информация о времени выполнения того либо иного процесса не сохраняется. Вот лишь некоторые примеры использования временных параметров: — элементарное добавление даты в запись БД; — отображение времени; — вывод дат в различном формате; — проверка текущего времени на соответствие заданному таймеру; — определение срока между 2-мя датами и так далее.
Чтобы работать со временем было удобно, у каждого языка программирования имеются специальные типы данных, позволяющие хранить соответствующие значения. Обычно речь идёт о числовом значении, как целом, так и с плавающей точкой.
В языке программирования PHP работу со временем символизирует UNIX TIMESTAMP. То есть время тут хранится в виде целого числа, а его исчисление начинается с полуночи 1.01.1970 — с так называемой нулевой даты, принятой в Unix и прочих POSIX-совместимых ОС (ещё эту дату называют «Unix-время»). В результате возвращается число секунд, которое прошло с начала Эпохи Unix.
Прежде чем приступить к дальнейшему изложению материала, следует определить текущее значение времени в формате UNIX TIMESTAMP. Делается это с помощью простейшего кода и функции time:
На момент написания материала было 14 октября 2020 года, поэтому в терминале отобразилось следующее:
Вы можете проверить вышеописанную команду и получить в PHP текущую дату и время самостоятельно, даже если не являетесь PHP-разработчиком — просто поместите код в любой онлайн-компилятор, вот один из многих. Так же рекомендуется делать и с остальным кодом — это поможет вам лучше понять работу описываемых в статье команд.
Но вернёмся к основной теме разговора. Благодаря коротенькому коду выше, мы получили от сервера текущее время — 1602666005 (у вас значение будет другим, ведь время не стоит на месте))).
Можно согласиться с тем, что для человека такой формат не очень удобен. Но на деле, чем проще представление данных, тем быстрее осуществляется обработка этих данных компьютерным устройством. Да и хранить такие значение в БД в плане ресурсов экономнее, чем при использовании специальных форматов. В итоге PHP работает со значениями времени одинаково на разных платформах (и Unix, и Windows), в результате чего обеспечивается универсальность использования кода.
Если же говорить об удобстве пользователя, то у разработчиков есть масса средств это удобство обеспечить.
Функция date
Эта функция возвратит пользователю строку в форме даты/времени, сделав это в определённом формате. Формат этот определяет сам пользователь.
Синтаксис функции выглядит так:
Видно, что формат указывается в качестве аргумента. Этим аргументом могут выступать самые разные символы, коих существует целая таблица:
Теперь давайте попробуем, как эта таблица работает на практике. Выведем текущий день недели:
У меня получился Wednesday, а вот что отобразится в консоли у вас, зависит от дня недели, в который вы напишете эту команду.
Теперь выведем дату в виде YYYY-ММ-DD:
Описание time и mktime
Уже упоминалось, что time возвратит количество секунд с начала т. н. эпохи Unix и вплоть до текущего времени. Однако на практике эта функция чаще используется не в «чистом виде», а вместе с иными функциями.
Для начала займёмся её использованием вместе с меткой текущей даты:
* 24 * 60 * 60); // 7 дней; 24 ч.; 60 мин.; 60 сек. echo $nextWeek; // будет выведено что-то вроде 16026782231603283023А теперь используем её же, но уже совместно с date() . Давайте выведем текущую дату двумя способами, а потом выведем дату, которая наступит через неделю:
* 24 * 60 * 60); // Первый способ вывода даты echo 'Сегодня: '. date('Y-m-d') ."\n"; // Второй способ вывода echo 'Сегодня: '. date('Y-m-d', $now) ."\n"; // Дата через неделю echo 'Через неделю будет: '. date('Y-m-d', $nextWeek) ."\n";Теперь стоит поговорить о том, каким образом с функцией time используется mktime. Именно mktime возвращает метки времени Unix для даты, которую укажет пользователь.
Аргументы могут быть разные, а также опущены справа налево:
![]()
Лучше всего рассмотреть вышеописанное на примере. Давайте выведем в терминал: — текущую полную дату и время (часы, минуты, секунды); — время и дату завтрашнего дня; — время и дату следующего месяца того же дня; — ту же дату, но уже прошедшего года.
На этом всё. Если интересуют более сложные и продвинутые знания по PHP, обратите внимание на соответствующий курс в OTUS!
date
Возвращает строку, отформатированную в соответствии с указанным в параметре format шаблоном. Используется метка времени, заданная параметром timestamp (метка времени Unix), или текущее системное время, если параметр timestamp не задан. Таким образом, параметр timestamp является необязательным и по умолчанию равен значению, возвращаемому функцией time() .
Метки времени Unix не обрабатывают часовые пояса. Используйте класс DateTimeImmutable и его метод форматирования DateTimeInterface::format() для форматирования информации о дате/времени с привязкой к часовому поясу.
Список параметров
Замечание: Функция date() всегда будет генерировать 000000 в качестве микросекунд, поскольку она принимает параметр int , тогда как DateTime::format() поддерживает микросекунды, если DateTime был создан с микросекундами.
Необязательный параметр timestamp представляет собой метку времени типа int , по умолчанию равную текущему локальному времени, если timestamp не указан или null . Другими словами, значение по умолчанию равно результату функции time() .
Возвращаемые значения
Возвращает отформатированную строку с датой.
Ошибки
Каждый вызов к функциям даты/времени при неправильных настройках часового пояса сгенерирует ошибку уровня E_WARNING , если часовой пояс некорректный. Смотрите также date_default_timezone_set()
Список изменений
Версия | Описание |
---|---|
8.0.0 | timestamp теперь допускает значение null. |
Примеры
Пример #1 Примеры использования функции date()
// установка часового пояса по умолчанию.
date_default_timezone_set ( 'UTC' );
?php
// выведет примерно следующее: Monday
echo date ( "l" );
// выведет примерно следующее: Monday 8th of August 2005 03:12:46 PM
echo date ( 'l jS \of F Y h:i:s A' );
// выведет: July 1, 2000 is on a Saturday
echo "July 1, 2000 is on a " . date ( "l" , mktime ( 0 , 0 , 0 , 7 , 1 , 2000 ));
/* пример использования константы в качестве форматирующего параметра */
// выведет примерно следующее: Mon, 15 Aug 2005 15:12:46 UTC
echo date ( DATE_RFC822 );
// выведет примерно следующее: 2000-07-01T00:00:00+00:00
echo date ( DATE_ATOM , mktime ( 0 , 0 , 0 , 7 , 1 , 2000 ));
?>
Чтобы запретить распознавание символа как форматирующего, следует экранировать его с помощью обратного слеша. Если экранированный символ также является форматирующей последовательностью, то следует экранировать его повторно.
Пример #2 Экранирование символов в функции date()
Для вывода прошедших и будущих дат удобно использовать функции date() и mktime() .
Пример #3 Пример совместного использования функций date() и mktime()
$tomorrow = mktime ( 0 , 0 , 0 , date ( "m" ) , date ( "d" )+ 1 , date ( "Y" ));
$lastmonth = mktime ( 0 , 0 , 0 , date ( "m" )- 1 , date ( "d" ), date ( "Y" ));
$nextyear = mktime ( 0 , 0 , 0 , date ( "m" ), date ( "d" ), date ( "Y" )+ 1 );
?>?php
Замечание:
Данный способ более надёжен, чем простое вычитание и прибавление секунд к метке времени, поскольку позволяет при необходимости гибко осуществить переход на летнее/зимнее время.
Ещё несколько примеров использования функции date() . Важно отметить, что следует экранировать все символы, которые необходимо оставить без изменений. Это справедливо и для тех символов, которые в текущей версии PHP не распознаются как форматирующие, поскольку это может быть введено в следующих версиях. Для экранировании управляющих последовательностей (например, \n) следует использовать одинарные кавычки.
Пример #4 Форматирование с использованием date()
// Предположим, что текущей датой является 10 марта 2001, 5:16:18 вечера,
// и мы находимся в часовом поясе Mountain Standard Time (MST)
?php
$today = date ( "F j, Y, g:i a" ); // March 10, 2001, 5:16 pm
$today = date ( "m.d.y" ); // 03.10.01
$today = date ( "j, n, Y" ); // 10, 3, 2001
$today = date ( "Ymd" ); // 20010310
$today = date ( 'h-i-s, j-m-y, it is w Day' ); // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$today = date ( '\i\t \i\s \t\h\e jS \d\a\y.' ); // it is the 10th day.
$today = date ( "D M j G:i:s T Y" ); // Sat Mar 10 17:16:18 MST 2001
$today = date ( 'H:m:s \m \i\s\ \m\o\n\t\h' ); // 17:03:18 m is month
$today = date ( "H:i:s" ); // 17:16:18
$today = date ( "Y-m-d H:i:s" ); // 2001-03-10 17:16:18 (формат MySQL DATETIME)
?>
Для форматирования дат на других языках вместо функции date() можно использовать метод IntlDateFormatter::format() .
Примечания
Замечание:
Для получения метки времени из строкового представления даты можно воспользоваться функцией strtotime() . Кроме того, некоторые базы данных имеют собственные функции для преобразования внутреннего представления даты в метку времени (например, функция MySQL » UNIX_TIMESTAMP).
Временную метку начала запроса можно получить из поля $_SERVER['REQUEST_TIME'] .
Смотрите также
- DateTimeImmutable::__construct() - Возвращает новый объект DateTimeImmutable
- DateTimeInterface::format() - Возвращает дату, отформатированную согласно переданному формату
- gmdate() - Форматирует дату/время по Гринвичу
- idate() - Преобразует локальное время/дату в целое число
- getdate() - Возвращает информацию о дате/времени
- getlastmod() - Получает время последней модификации страницы
- mktime() - Возвращает метку времени Unix для заданной даты
- IntlDateFormatter::format() - Форматирует значение даты/времени в виде строки
- time() - Возвращает текущую метку системного времени Unix
- Предопределённые константы даты и времени
User Contributed Notes
- Функции даты и времени
- 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