=")) { return (new self)->setTimestamp($temp->getTimestamp())->setTimezone($temp->getTimezone())->setTime((int) $temp->format("H"), (int) $temp->format("i"), (int) $temp->format("s"), (int) $temp->format("u")); } else { return (new self)->setTimestamp($temp->getTimestamp())->setTimezone($temp->getTimezone()); } } public function __construct($time = "now", $timezone = null) { parent::__construct($time, $timezone); } public static function createFromFormat($format, $time, $timezone = null): ?self { $temp = parent::createFromFormat("!".$format, $time, $timezone); return $temp ? static::create($temp) : null; } public static function createFromMutable($datetime) { $temp = parent::createFromMutable($datetime); return $temp ? static::create($temp) : null; } public static function createFromImmutable($datetime) { $temp = \DateTime::createFromImmutable($datetime); return $temp ? static::create($temp) : null; } public function __toString() { if ((int) $this->format("u")) { return $this->format("Y-m-d\TH:i:s.uP"); } else { return $this->format("Y-m-d\TH:i:sP"); } } public function jsonSerialize() { return $this->__toString(); } }