W3docs

Работа с датой и временем в PHP

PHP предоставляет мощные инструменты для работы с датой и временем. Узнайте о date_add(), DateTime::add() и других функциях.

PHP — популярный серверный язык программирования, широко используемый для создания динамических веб-страниц. Одной из важнейших возможностей PHP является работа с датой и временем. В этой статье мы рассмотрим различные функции для работы с датой и временем, доступные в PHP, и то, как они помогают упростить написание кода.

Понимание даты и времени в PHP

Прежде чем перейти к рассмотрению функций PHP для работы с датой и временем, давайте разберёмся, как PHP обрабатывает даты и время. В PHP даты и время представлены в виде строк. Наиболее распространённый формат записи даты — YYYY-MM-DD, а времени — HH:MM:SS.

PHP также предоставляет встроенную функцию date(), которую можно использовать для форматирования дат и времени в различных форматах. Функция date() принимает два аргумента: строку формата и временную метку. Строка формата задаёт желаемый формат вывода даты и времени, а временная метка указывает, какой момент времени нужно отформатировать.

Добавление времени к датам в PHP

Функция date() используется главным образом для форматирования временных меток в читаемые строки. Для прибавления или вычитания временных интервалов к дате PHP предоставляет класс DateTime с методом add(). Процедурная функция date_add() (от которой получила название эта глава) является устаревшим псевдонимом для DateTime::add(), однако рекомендуется использовать объектно-ориентированный подход.

Вот пример добавления одного дня к заданной дате с помощью DateTime::add():

php— editable, runs on the server

В этом примере мы создаём object DateTime из исходной строки с датой. Затем используем метод add() с object DateInterval (P1D означает период в 1 день) для изменения даты. В конце форматируем и выводим обновлённую дату.

Понимание формата DateInterval

Строка, передаваемая в DateInterval, соответствует формату длительности ISO 8601. Она всегда начинается с буквы P (от слова «period» — период). Сначала идут части, относящиеся к дате, затем необязательный разделитель T вводит части, относящиеся к времени:

КодЗначение
Yгоды
Mмесяцы (до T)
Dдни
Tразделитель перед частями времени
Hчасы
Mминуты (после T)
Sсекунды

Таким образом, P1Y2M10DT2H30M означает «1 год, 2 месяца, 10 дней, 2 часа и 30 минут». Обратите внимание, что M означает месяцы до T и минуты после него — это частый источник ошибок.

<?php

$date = new DateTime('2022-01-01 00:00:00');
$date->add(new DateInterval('P1Y2M10DT2H30M'));
echo $date->format('Y-m-d H:i:s');
?>

add() изменяет исходный object

DateTime::add() изменяет object на месте, не возвращая новый. Если нужно сохранить исходную дату, используйте DateTimeImmutable — он возвращает новый object при каждой операции:

<?php

$start = new DateTimeImmutable('2022-03-02');
$next  = $start->add(new DateInterval('P1D'));

echo $start->format('Y-m-d'), "\n"; // unchanged
echo $next->format('Y-m-d'), "\n";  // one day later
?>

Вычитание времени из дат

Чтобы сдвинуть дату назад, используйте метод DateTime::sub() с DateInterval. Он работает точно так же, как add(), но в обратном направлении:

<?php

$date = new DateTime('2022-03-02');
$date->sub(new DateInterval('P1M')); // subtract one month
echo $date->format('Y-m-d');
?>

Измерение разницы между датами

Чтобы узнать, насколько далеко отстоят две даты друг от друга, используйте DateTime::diff() (процедурный псевдоним date_diff()). Метод возвращает DateInterval, который можно отформатировать:

<?php

$a = new DateTime('2022-01-01');
$b = new DateTime('2022-03-02');
$diff = $a->diff($b);
echo $diff->format('%a days'); // total days between the two dates
?>

Другие функции для работы с датой и временем в PHP

Помимо DateTime::add(), PHP предоставляет ряд других функций для работы с датами и временем. Среди них:

  • strtotime(): Разбирает текстовое описание даты и времени на английском языке и возвращает Unix-временную метку
  • time(): Возвращает текущую Unix-временную метку
  • mktime(): Возвращает Unix-временную метку для заданной даты и времени
  • date_modify(): Изменяет object DateTime с использованием текстового относительного формата (например, +1 day)
  • date_sub(): Устаревший процедурный псевдоним для DateTime::sub()
  • date_diff(): Вычисляет разницу между двумя объектами DateTime

Использование этих функций совместно с методами DateTime поможет вам эффективно выполнять разнообразные операции с датой и временем.

Заключение

В этой статье мы рассмотрели, как работать с датами и временем в PHP. Мы уточнили, что функция date() используется для форматирования, тогда как для прибавления или вычитания времени лучше всего использовать метод DateTime::add(). Мы также рассмотрели другие полезные функции, такие как strtotime(), mktime() и date_diff(), и отметили, что date_add() является устаревшим процедурным псевдонимом. Правильное использование этих инструментов поможет вам надёжно управлять операциями с датой и временем в ваших PHP-приложениях.

Практика

Практика
Что делает функция date_add() в PHP?
Что делает функция date_add() в PHP?
Was this page helpful?