Разница между DateTime и DateTimeImmutable в PHP заключается в возможности изменения объектов. 12
DateTime — изменяемый класс, при изменении объекта изменяется сам экземпляр. 2 Например, если добавить 1 день к дате, то и исходная дата тоже изменится. 2
DateTimeImmutable — неизменяемый класс, при попытке изменить объект возвращается новый экземпляр с изменённой датой. 12 Например, если добавить 1 день к дате, то исходная дата останется прежней, а новый объект будет содержать изменённую дату. 2
Обычно DateTimeImmutable рекомендуют использовать в случаях, когда нужно предотвратить прямое изменение даты и времени, например, при прохождении объекта через серию промежуточных слоёв. 1 DateTime же используют, когда необходимо управлять датой и/или временем внутри одного экземпляра объекта. 1