Tho*_*uer 15

DateTime::createFromImmutable()在PHP中有一个方法的pull请求.它已经整合(1,2),只是被删除后没有任何理由.现在它似乎又回来了,但仅适用于PHP 7.3及更高版本.

所以这可能是目前最简单的方法:

$dateTime = new \DateTime();
$dateTime->setTimestamp($dateTimeImmutable->getTimestamp());
Run Code Online (Sandbox Code Playgroud)

如果您需要包含时区信息:

$dateTime = new \DateTime(null, $dateTimeImmutable->getTimezone());
$dateTime->setTimestamp($dateTimeImmutable->getTimestamp());
Run Code Online (Sandbox Code Playgroud)

  • 我会`new/DateTime($ immutable-> format(\ DateTime :: ATOM))`.这是我可以想象的整洁和最少的数据丢失(时区等). (4认同)
  • 我想@AdrianFöder的解决方案是最好的.请注意,您应该执行`new\DateTime('now',$ dateTimeImmutable-> getTimezone());`.它不接受null作为第一个参数. (3认同)

paq*_*q85 9

要使用正确的时区进行转换:

对于 PHP >= 7.3

DateTime::createFromImmutable(dateTimeImmutable);
Run Code Online (Sandbox Code Playgroud)

对于 PHP <= 7.2

DateTime::createFromFormat(
   DateTimeInterface::ATOM, 
   $dateTimeImmutable->format(DateTimeInterface::ATOM)
);
Run Code Online (Sandbox Code Playgroud)