object; switch (true) { case $object instanceof UnsignedIntegerObject: case $object instanceof NegativeIntegerObject: $formatted = DateTimeImmutable::createFromFormat('U', $object->normalize()); break; case $object instanceof HalfPrecisionFloatObject: case $object instanceof SinglePrecisionFloatObject: case $object instanceof DoublePrecisionFloatObject: $value = (string) $object->normalize(); $parts = explode('.', $value); if (isset($parts[1])) { if (mb_strlen($parts[1], '8bit') > 6) { $parts[1] = mb_substr($parts[1], 0, 6, '8bit'); } else { $parts[1] = str_pad($parts[1], 6, '0', STR_PAD_RIGHT); } } $formatted = DateTimeImmutable::createFromFormat('U.u', implode('.', $parts)); break; default: throw new InvalidArgumentException('Unable to normalize the object'); } if ($formatted === false) { throw new InvalidArgumentException('Invalid data. Cannot be converted into a datetime object'); } return $formatted; } }