edit: Как указывает calumbrodie, вы можете использовать метод sub вместо инвертирования интервала и добавления его к объекту даты
Я пытался что-то сделатьпохоже на оригинальный вопрос.Мне нужно было вычесть 1 день из объекта DateTime.Я знаю, что другие решения работают, но вот другой способ, который мне понравился больше.Я использовал эту функцию:
function getPreviousDay($dateObject){
$interval = new DateInterval('P1D');
$dateObject->sub($interval);
return $dateObject;
}
$ dateObject - это объект DateTime, который может иметь любую дату, которую вы не хотите, но, поскольку я хотел текущую дату, я написал:
$dateObject = new DateTime('now');
Моя функция вычитает 1 день из полученной даты, но вы можете изменить ее, чтобы она вычитала 3 месяца, изменяя конструктор DateInterval следующим образом:
$interval = new DateInterval('P3M');
$dateObject->sub($interval);
return $dateObject;
Вы можете найти объяснение в формате строкииспользуется в конструкторе DateInterval здесь
документация конструктора DateInterval
Там вы увидите, что буква 'P' (точка) является обязательной, для использования вы используете intпродолжительность периода, а затем укажите тип периода, в случае месяцев «М».Похоже, что в документации произошла ошибка, в ней говорится, что « M » используется месяцами и минутами, но фактически работает месяцами.Если вам нужно использовать минуты, вы должны указать «PTM», например, «PT3M» на 3 минуты, за пределами таблицы указано, что вы должны использовать идентификатор «T» для временных интервалов.
edit: чтобы датьполный пример, вы должны использовать этот формат для полного интервала времени даты:
$format = 'P1Y2M4DT2H1M40S';
Это будет представлять интервал 1 год, 2 месяца, 4 дня, 2 часа, 1 минута и 40 секунд
Надеюсь, это кому-нибудь поможет