PHP 8.4.0 Alpha 2 available for testing

DateTime::modify

date_modify

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

DateTime::modify -- date_modifyИзменение временной метки

Описание

Объектно-ориентированный стиль

public DateTime::modify(string $modifier): DateTime|false

Процедурный стиль

Изменяет метку времени объекта DateTime путём добавления или вычитания времени в формате, принятом для функции DateTimeImmutable::__construct().

Список параметров

object

Только для процедурного стиля: объект DateTime, который возвращает функция date_create(). Функция изменяет этот объект.

modifier

Строка даты и времени. Объяснение корректных форматов дано в разделе Форматы даты и времени.

Возвращаемые значения

Возвращает модифицированный объект DateTime для применения в цепи методов или false, если возникла ошибка.

Ошибки

Только для объектно-ориентированного API: Если передана строка с недопустимой датой/временем, будет выброшено исключение DateMalformedStringException.

Список изменений

Версия Описание
8.3.0 Теперь вместо предупреждения в методе DateTime::modify() выбрасывается исключение DateMalformedStringException, если передана недопустимая строка. Функция date_modify() не была изменена.

Примеры

Пример #1 Пример использования DateTime::modify()

Объектно-ориентированный стиль

<?php
$date
= new DateTime('2006-12-12');
$date->modify('+1 day');
echo
$date->format('Y-m-d');
?>

Процедурный стиль

<?php
$date
= date_create('2006-12-12');
date_modify($date, '+1 day');
echo
date_format($date, 'Y-m-d');
?>

Результат выполнения приведённых примеров:

2006-12-13

Пример #2 Будьте осторожны при добавлении и вычитании месяцев

<?php
$date
= new DateTime('2000-12-31');

$date->modify('+1 month');
echo
$date->format('Y-m-d') . "\n";

$date->modify('+1 month');
echo
$date->format('Y-m-d') . "\n";
?>

Результат выполнения приведённого примера:

2001-01-31
2001-03-03

Пример #3 Поддерживаются все форматы даты и времени

<?php
$date
= new DateTime('2020-12-31');

$date->modify('July 1st, 2023');
echo
$date->format('Y-m-d H:i') . "\n";

$date->modify('Monday next week');
echo
$date->format('Y-m-d H:i') . "\n";

$date->modify('17:30');
echo
$date->format('Y-m-d H:i') . "\n";
?>

Результат выполнения приведённого примера:

2023-07-01 00:00
2023-07-03 00:00
2023-07-03 17:30

Смотрите также

  • strtotime() - Преобразовывает текстовое представление даты на английском языке в метку времени Unix
  • DateTimeImmutable::modify() - Создаёт новый объект с изменённой временной меткой
  • DateTime::add() - Изменяет объект DateTime, добавляя количество дней, месяцев, лет, часов, минут и секунд
  • DateTime::sub() - Вычитает дни, месяцы, годы, часы, минуты и секунды из объекта DateTime
  • DateTime::setDate() - Устанавливает дату
  • DateTime::setISODate() - Устанавливает дату в формате ISO
  • DateTime::setTime() - Устанавливает время
  • DateTime::setTimestamp() - Устанавливает дату и время на основе метки времени Unix
add a note

User Contributed Notes 1 note

up
4
php_net at striderweb dot com
3 months ago
You have to be a bit careful with variables here. If for example you want to add a variable amount of minutes you might use `->modify("+$min"). This will not work out if `$min` is a negative number, because modify will see the "+" and ignore the "-". If `$min` equals -10, modify in this example will add ten minutes, not subtract!

What is happening is if the modify string has two operations, the first will be obeyed and later ones will be ignored.

So "+-10 minutes" will add ten minutes, even though you might expect it to add the negative number. Similarly "--10 minutes" will subtract ten minutes, despite the apparent logic of subtracting a negative number.
To Top