PHP - это серверный язык сценариев, который позволяет создавать динамический контент на веб-страницах. Как и JavaScript, который работает на клиентском компьютере, PHP умеет обрабатывать дату и время и манипулировать ими. В этой статье мы рассмотрим, как получить и отформатировать текущую дату и время в PHP, т.к. это часто бывает необходимо при помещении постов, заказов и т.п. в базу данных.
Функции даты и времени в PHP
PHP предлагает ряд встроенных функций для манипулирования датой и временем. Наиболее часто используемые функции:
date()
: Эта функция возвращает текущую дату и время в указанном формате.time()
: возвращает текущую метку времени Unix (количество секунд с 1 января 1970 года).- Класс
DateTime
: объектно-ориентированный подход к манипулированию датой и временем, обеспечивающий большую гибкость и функциональность.
Форматирование вывода даты и времени
В PHP за варианты форматирования даты отвечают функция date()
и метод DateTime::format
. В качестве параметров вы можете передать один или несколько символов, которые сформируют строковое представление даты и/или времени.
Некоторые часто используемые символы формата даты и времени в PHP:
- 'Y' четырехзначный год.
- 'm' - двузначный месяц.
- 'd' - двузначный день месяца.
- 'j' - день месяца без ведущего нуля
- 'H' - двузначный час в 24-часовом формате.
- 'i' - двузначные минуты.
- 's' - двузначные секунды.
- 'l' - полное наименование дня недели (От
Sunday
доSaturday)
- 'D' - текстовое представление дня недели, 3 символа (От
Mon
доSun
) - 'w' - порядковый номер дня недели (от
0
(воскресенье) до6
(суббота)) - 'F' - полное наименование месяца на английском, например, January или March
- 'M' - сокращённое наименование месяца, 3 символа (от
Jan
доDec)
Вы можете комбинировать эти символы для создания различных форматов даты и времени. Все символы можно найти в документации.
Получение текущей даты и времени
Способ 1. Использование функции date()
Тут все просто. Вызываем функцию date()
, передавая параметры с разделителями, которые нам удобны - точки, слэши, дефисы:
1 2 3 4 5 |
<?php echo date("d.m.Y"); echo date("d/m/Y"); echo date("d-m-Y"); ?> |
Вывод: 12.01.2024
или 12/01/2024
или 12-01-2024
.
Для вывода времени и даты со временем:
1 2 3 4 |
<?php echo date("H:i:s"); echo date("d.m.Y H:i:s"); ?> |
Вывод: 12:04:27
и 12.01.2024 12:04:27
На самом деле можно уже остановиться на этом способе и больше ничего не использовать.
Способ 1а. Использование функций mktime() и date()
Чуть более сложный способ - определяем количество миллисекунд, прошедших с 00:00:00 1 января 1970 года (базовая дата для отсчета времени) до текущей даты, а затем выводим дату в нужном формате:
1 2 3 4 5 6 7 |
<?php $date = mktime(date('H'), date('i'), date('s'), date("m") , date("d"), date("Y")); echo '<p>Сегодня - это '.$date.' миллисекунд</p>'; $newDate = date("d.m.Y H:i",$date); echo "<p>Новый формат: " . $newDate.'</p>'; ?> |
Тут тоже можно использовать разные форматы для вывода даты и времени.
Работа с временными метками Unix
Функция time()
возвращает текущую временную метку Unix. Это значение можно использовать date()
для форматирования отметки времени:
1 |
echo date("d-m-Y H:i:s", time()); |
Хотя это может показаться излишним, поскольку date()
без второго параметра по умолчанию используется текущее время, использование time()
может быть иногда полезно.
Способ 2. Использование класса DateTime
Для более сложных операций можно использовать класс DateTime
. Для того чтобы получить текущую дату и время, вы можете создать объект new DateTime
, а затем отформатировать его:
1 2 3 4 5 |
<?php $dateTime = new DateTime(); //print_r( $dateTime); //вывод данных об объекте с датой echo $dateTime->format("d.m.Y H:i:s"); ?> |
Этот метод обеспечивает большую гибкость, например, легко манипулировать датой и временем (добавление или вычитание времени) и обработку часовых поясов.
Обработка часовых поясов при выводе даты в PHP
Точкой отсчета времени является время по Гринвичу, или UTC (Всемирное Координированное Время). Если вам нужно узнать временную зону какого-либо города, вы можете воспользоваться сайтом zeitverschiebung, введя название этого города.
Правильная обработка часовых поясов может иметь важное значение для приложений, которые работают по всему миру или в рамках большой страны. Вы можете использовать PHP функцию date_default_timezone_set()
для установки часового пояса по умолчанию для всех функций даты и времени:
1 2 3 4 |
<?php date_default_timezone_set('America/New_York'); echo date("Y-m-d H:i:s"); ?> |
Сравните данные с другой временной зоной:
1 2 3 4 |
<?php date_default_timezone_set('Europe/Kiev'); echo date("Y-m-d H:i:s"); ?> |
Для Германии, например, код будет таким:
1 2 |
date_default_timezone_set('Europe/Berlin'); echo date("Y-m-d H:i:s"); |
Класс DateTime также позволяет обрабатывать определенные часовые пояса. Например, для Индии мы можем написать так:
1 2 3 4 |
<?php $dateTime = new DateTime("now", new DateTimeZone('Asia/Calcutta')); echo $dateTime->format("Y-m-d H:i:s"); ?> |
Конвертировать дату, время, часовой пояс
Например, вы сохранили дату (2018-01-11 01:17:23) в часовом поясе UTC в вашей базе данных. Теперь преобразуйте этот DateTime в часовой пояс EST (Северноамериканское Восточное Стандартное Время).
1 2 3 4 5 6 |
<?php $date = new DateTime('2024-12-01 10:23:42', new DateTimeZone('UTC')); echo "<p>Время по Гринвичу: ". $date->format('d.m.Y H:i:s') ."</p>"; $date->setTimezone(new DateTimeZone('EST')); echo "<p>Новое время: ". $date->format('d.m.Y H:i:s') ."</p>"; ?> |
После выполнения скрипта вы увидите такие результаты:
1 2 3 |
Время по Гринвичу: 01.12.2024 10:23:42 Новое время: 01.12.2024 05:23:42 |
Все часовые пояса можно найти здесь.
Надеюсь, какой-либо из способов вам пригодился. О том, как преобразовать дату в PHP, читайте в отдельной статье.