getMessage()), $ex->getCode(), $ex); } return $obj; } public function setTime($hour, $minute, $second = 0, $microsecond = 0) : \DateTimeInterface { $fromParent = parent::setTime($hour, $minute, $second, $microsecond); return new static($fromParent); } public function save() { return $this->__toString(); } public function __toString() { return $this->format($this->format); } #[\Deprecated] public function formatLocale(string $format) : string { return strftime($format, $this->getTimestamp()); } public function formatLocaleIntl(int $dateFormatter = \IntlDateFormatter::LONG, int $timeFormatter = \IntlDateFormatter::NONE, ? string $pattern = null) : string { $formatter = new \IntlDateFormatter(\Locale::getDefault(), $dateFormatter, $timeFormatter, \date_default_timezone_get(), \IntlDateFormatter::GREGORIAN, $pattern); return $formatter->format($this->getTimestamp()); } public function ageAt(null|\DateTime $dateTime) : int { return (int) ( (int) ($dateTime ?: new DateTime())->format('Ymd') - (int) $this->format('Ymd') ) / 10000; } public function jsonSerialize(): mixed { return $this; } }