diff --git a/lib/DateTimeImmutable.php b/lib/DateTimeImmutable.php index 5cedd24a..d9900d92 100644 --- a/lib/DateTimeImmutable.php +++ b/lib/DateTimeImmutable.php @@ -239,6 +239,16 @@ public static function createFromMutable($dateTime): self return self::createFromRegular($date); } + public static function createFromInterface(\DateTimeInterface $object): self + { + if ($object instanceof \DateTime) { + $object = self::createFromMutable($object); + } elseif ($object instanceof DateTimeImmutable) { + $object = $object->getInnerDateTime(); + } + return self::createFromRegular($object); + } + /** * @param mixed[] $array * @return DateTimeImmutable diff --git a/tests/DateTimeImmutableTest.php b/tests/DateTimeImmutableTest.php index 83bdd1e8..bfd207d5 100644 --- a/tests/DateTimeImmutableTest.php +++ b/tests/DateTimeImmutableTest.php @@ -18,4 +18,24 @@ public function testCreateFromMutable(): void self::assertSame($safeDate->format(\DateTimeInterface::ATOM), $safeImmutableDate->format(\DateTimeInterface::ATOM)); } + + /** + * @dataProvider createFromInterfaces + */ + public function testCreateFromInterface(\DateTimeInterface $dateTime): void + { + $safeImmutableDate = \Safe\DateTimeImmutable::createFromInterface($dateTime); + + self::assertSame($dateTime->format(\DATE_ATOM), $safeImmutableDate->format(\DATE_ATOM)); + } + + public function createFromInterfaces(): array + { + return [ + [new \DateTime('2022-11-29T14:17:34+00:00')], + [new \Safe\DateTime('2022-11-29T14:17:34+00:00')], + [new \DateTimeImmutable('2022-11-29T14:17:34+00:00')], + [new \Safe\DateTimeImmutable('2022-11-29T14:17:34+00:00')], + ]; + } }