Преобразование \DateTimeImmutable в\DateTime

Как я могу преобразовать DateTimeImmutable объект в DateTime объект?

Ответ 1

Существует запрос на DateTime::createFromImmutable() метода DateTime::createFromImmutable() в PHP. Он был интегрирован (1, 2), чтобы быть удаленным позже без причины. Теперь, похоже, он вернулся, но только для PHP 7.3 и выше.

Так что это, наверное, самый простой способ прямо сейчас:

$dateTime = new \DateTime();
$dateTime->setTimestamp($dateTimeImmutable->getTimestamp());

Если вам нужно включить информацию о часовом поясе:

$dateTime = new \DateTime(null, $dateTimeImmutable->getTimezone());
$dateTime->setTimestamp($dateTimeImmutable->getTimestamp());

Ответ 2

Вы можете сделать это как однострочный:

$dateTime = new DateTime("@{$dateTimeImmutable->getTimeStamp()}");

Ответ 3

Чтобы конвертировать с правильным часовым поясом:

Для PHP> = 7.3

DateTime::createFromImmutable(dateTimeImmutable);

Для PHP <= 7.2

DateTime::createFromFormat(
   DateTimeInterface::ATOM, 
   $dateTimeImmutable->format(DateTimeInterface::ATOM)
);