W3docs

time()

Функции даты и времени PHP: time(), date(), strtotime(), DateTimeImmutable, DateInterval и DateTimeZone с примерами и справочником форматов.

Введение

PHP предоставляет богатый набор функций для работы с датой и временем, необходимых при обработке временных данных: ведении журналов событий, планировании задач, вычислении продолжительности и отображении локализованных дат. В этом руководстве рассматриваются наиболее часто используемые инструменты — time(), date(), strtotime() и современный объектный API DateTimeImmutable / DateInterval / DateTimeZone — с их синтаксисом и практическими выполняемыми примерами.

Несколько концепций, которые нужно знать заранее:

  • Unix-временная метка — это целое число, отсчитывающее секунды с 1 января 1970 года 00:00:00 UTC («эпоха»). Она не зависит от часового пояса, что делает её идеальной для хранения и сравнения моментов времени.
  • Строка формата преобразует временную метку в удобочитаемую строку. Каждый символ (Y, m, d, H, …) соответствует компоненту даты.
  • PHP отображает даты, используя часовой пояс сервера по умолчанию. Устанавливайте его явно, чтобы избежать неожиданностей:
<?php

date_default_timezone_set('UTC');

Установка часового пояса заранее делает date() и time() детерминированными на всех серверах. Для более подробного введения см. PHP Date and Time.

Функция date() в PHP

Функция date() форматирует временную метку в удобочитаемую строку. Она принимает два параметра: format (обязательный) и timestamp (необязательный, по умолчанию — текущее время). Строка формата использует специальные символы для представления компонентов даты.

Пример функции date() в PHP

php— editable, runs on the server

В этом примере Y, m и d представляют четырёхзначный год, двузначный месяц и двузначный день соответственно. Строка формата поддерживает множество других символов для часов, минут, секунд и не только.

Часто используемые символы формата

СимволЗначениеПример
YГод, 4 цифры2023
yГод, 2 цифры23
mМесяц, с ведущим нулём03
nМесяц, без ведущего нуля3
dДень месяца, с ведущим нулём03
jДень месяца, без ведущего нуля3
HЧас, 24ч, с ведущим нулём14
gЧас, 12ч, без ведущего нуля2
iМинуты09
sСекунды05
AAM/PMPM
lПолное название дняFriday
DСокращённое название дняFri
FПолное название месяцаMarch
TАббревиатура часового поясаUTC

Передайте второй аргумент для форматирования любой временной метки, а не только «сейчас»:

<?php

date_default_timezone_set('UTC');

echo date("l, F j, Y", 1678838400); // outputs "Wednesday, March 15, 2023"

Чтобы экранировать буквальный символ, не интерпретируя его как символ формата, поставьте перед ним обратный слэш (например, date('jS \o\f F')). Дополнительные параметры форматирования см. в date() и date_format().

Функция time() в PHP

Функция time() возвращает текущую Unix-временную метку — количество секунд, прошедших с 1 января 1970 года 00:00:00 UTC.

Как использовать функцию time() в PHP?

php— editable, runs on the server

Возвращаемое целое число можно передавать непосредственно в date() или другие функции для работы со временем. Поскольку временная метка — это просто число, над ней можно выполнять арифметические операции — например, добавить 86400 (количество секунд в сутках), чтобы получить «то же время завтра»:

<?php

date_default_timezone_set('UTC');

$tomorrow = time() + 86400; // 24 * 60 * 60 seconds
echo date("Y-m-d H:i:s", $tomorrow);

Для работы с датами, учитывающей месяцы, високосные годы и переход на летнее время, предпочтительнее использовать объектный API, описанный ниже, а не арифметику с секундами.

Функция strtotime() в PHP

Функция strtotime() разбирает текстовое описание даты и времени на английском языке и преобразует его в Unix-временную метку. Она принимает один строковый аргумент.

Пример функции strtotime() в PHP

php— editable, runs on the server

Это преобразует указанную строку с датой и временем в соответствующее значение Unix-временной метки. strtotime() также понимает относительные выражения, что удобно для планирования:

<?php

date_default_timezone_set('UTC');

echo date("Y-m-d", strtotime("next monday")), "\n";
echo date("Y-m-d", strtotime("2023-03-03 +1 week")); // outputs "2023-03-10"

Если строку не удаётся разобрать, strtotime() возвращает false, поэтому всегда проверяйте результат перед его использованием.

Класс DateInterval в PHP

Класс DateInterval представляет продолжительность между двумя датами или моментами времени. В современной разработке на PHP для вычисления интервалов, как правило, используется DateTimeImmutable, поскольку это позволяет избежать изменения исходного объекта даты.

Пример класса DateInterval в PHP

php— editable, runs on the server

Этот код вычисляет разницу между двумя датами. Спецификатор формата %R%a выводит знак (+ или -), за которым следует общее количество дней.

Также можно создать DateInterval непосредственно из строки ISO 8601 duration и прибавлять или вычитать его из даты. P1W означает «период в одну неделю»:

<?php

$start = new DateTimeImmutable('2023-03-03');
$later = $start->add(new DateInterval('P1W'));
echo $later->format('Y-m-d'); // outputs "2023-03-10"

Поскольку DateTimeImmutable никогда не изменяет исходный объект, $start по-прежнему указывает на 3 марта после вызова add(). Процедурные аналоги см. в date_add(), date_sub() и date_diff().

Функции работы с часовыми поясами в PHP

PHP работает с часовыми поясами через класс DateTimeZone и связанные методы. Они позволяют выполнять конвертацию между поясами и отображать смещения UTC.

Пример функций работы с часовыми поясами в PHP

php— editable, runs on the server

Этот код выводит дату и время в указанном часовом поясе вместе с его аббревиатурой (например, EST).

Чтобы конвертировать существующий момент времени из одного пояса в другой, используйте setTimezone(). Сам момент времени не меняется — изменяется только его представление:

<?php

$ny = new DateTimeImmutable('2023-03-03 12:00:00', new DateTimeZone('America/New_York'));
$utc = $ny->setTimezone(new DateTimeZone('UTC'));
echo $utc->format('Y-m-d H:i:s T'); // outputs "2023-03-03 17:00:00 UTC"

Нью-Йорк в марте отстаёт от UTC на пять часов, поэтому полдень в Нью-Йорке соответствует 17:00 UTC. Чтобы изменить часовой пояс, используемый процедурными функциями date() и time(), вызовите date_default_timezone_set().

Процедурный и объектный API: что выбрать

PHP предлагает два стиля работы с датами:

  • Процедурные функции (time(), date(), strtotime(), getdate(), gmdate()) лаконичны и отлично подходят для быстрого форматирования или разовых преобразований.
  • Объектный API (DateTimeImmutable, DateInterval, DateTimeZone) — рекомендуемый выбор для задач, связанных с часовыми поясами, продолжительностью или арифметикой дат, поскольку он явный, неизменяемый и избавляет от подводных камней целочисленной арифметики секунд при переходе на летнее время.

Практическое правило: обращайтесь к DateTimeImmutable всякий раз, когда дата пересекает часовой пояс или требует сложения/вычитания.

Заключение

Владение функциями PHP для работы с датой и временем позволяет разработчикам точно обрабатывать временные данные в разных средах и часовых поясах. Начните с time() и date() для простых случаев, используйте strtotime() для разбора пользовательского ввода и применяйте семейство DateTimeImmutable для надёжной арифметики дат.

Практика

Практика
Каковы возможности функции 'date()' в PHP?
Каковы возможности функции 'date()' в PHP?
Was this page helpful?