public function __construct($time, $timeZone = null)
{
if (!is_object($time)) {
$timeZone = $this->createTimeZone($timeZone ? $timeZone : date_default_timezone_get());
if (is_numeric($time)) {
// Unix timestamp as an integer or string
$this->dateTime = new \DateTime('', $timeZone);
$this->dateTime->setTimestamp($time);
} elseif (is_string($time)) {
// Textual representation
try {
$this->dateTime = new \DateTime($time, $timeZone);
} catch (\Exception $e) {
throw new \InvalidArgumentException(sprintf('Provided textual date/time definition "%s" is invalid', $time), 0, $e);
}
} else {
throw new \InvalidArgumentException(sprintf('Provided date/time must be a number, %s or %s instance or a parameter compatible with PHP function strtotime().', \Jyxo\Time\Time::class, \DateTimeInterface::class));
}
} elseif ($time instanceof self) {
// \Jyxo\Time\Time
$this->dateTime = new \DateTime($time->format('Y-m-d H:i:s'), $time->getTimeZone());
if ($timeZone) {
$this->dateTime->setTimezone($this->createTimeZone($timeZone));
}
} elseif ($time instanceof \DateTime) {
// \DateTime
$this->dateTime = clone $time;
if ($timeZone) {
$this->dateTime->setTimezone($this->createTimeZone($timeZone));
}
} else {
throw new \InvalidArgumentException(sprintf('Provided date/time must be a number, %s or %s instance or a parameter compatible with PHP function strtotime().', \Jyxo\Time\Time::class, \DateTimeInterface::class));
}
}