diff --git a/src/Utils/DateTime.php b/src/Utils/DateTime.php index 963407c0d..90ae3c903 100644 --- a/src/Utils/DateTime.php +++ b/src/Utils/DateTime.php @@ -129,6 +129,16 @@ public function __toString(): string } + public function modify(string $modifier): static + { + $datetime = @parent::modify($modifier); // @ is escalated to exception + if ($datetime === false) { + throw new Nette\InvalidArgumentException(Helpers::getLastError()); + } + return $datetime; + } + + /** * Creates a copy with a modified time. */ diff --git a/tests/Utils/DateTime.modifyClone.phpt b/tests/Utils/DateTime.modifyClone.phpt index b3ed3fbc2..4003e77f0 100644 --- a/tests/Utils/DateTime.modifyClone.phpt +++ b/tests/Utils/DateTime.modifyClone.phpt @@ -25,3 +25,9 @@ $dolly2 = $date->modifyClone('+1 hour'); Assert::type(DateTime::class, $dolly2); Assert::notSame($date, $dolly2); Assert::notSame((string) $date, (string) $dolly2); + +Assert::exception( + fn() => $date->modifyClone('xx'), + PHP_VERSION_ID >= 80300 ? DateMalformedStringException::class : Nette\InvalidArgumentException::class, + 'DateTime::modify(): Failed to parse %a%', +);