From ddf7b74bf0054c3baae38b3fff8183e3df8f2ce1 Mon Sep 17 00:00:00 2001 From: David Grudl Date: Thu, 12 Dec 2013 15:57:34 +0100 Subject: [PATCH] DibiDateTime: works with UNIX timestamps bigger than 32bits --- dibi/libs/DibiDateTime.php | 48 +++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/dibi/libs/DibiDateTime.php b/dibi/libs/DibiDateTime.php index 6f6e9231..271d96af 100644 --- a/dibi/libs/DibiDateTime.php +++ b/dibi/libs/DibiDateTime.php @@ -22,9 +22,11 @@ class DibiDateTime extends DateTime public function __construct($time = 'now', DateTimeZone $timezone = NULL) { if (is_numeric($time)) { - $time = date('Y-m-d H:i:s', $time); - } - if ($timezone === NULL) { + $tmp = new self('@' . $time); + $tmp->setTimeZone($timezone ? $timezone : new DateTimeZone(date_default_timezone_get())); + return $tmp; + + } elseif ($timezone === NULL) { parent::__construct($time); } else { parent::__construct($time, $timezone); @@ -46,6 +48,28 @@ class DibiDateTime extends DateTime } + public function setTimestamp($timestamp) + { + $zone = PHP_VERSION_ID === 50206 ? new \DateTimeZone($this->getTimezone()->getName()) : $this->getTimezone(); + $this->__construct('@' . $timestamp); + $this->setTimeZone($zone); + return $this; + } + + + public function getTimestamp() + { + $ts = $this->format('U'); + return is_float($tmp = $ts * 1) ? $ts : $tmp; + } + + + public function __toString() + { + return $this->format('Y-m-d H:i:s'); + } + + public function __sleep() { $zone = $this->getTimezone()->getName(); @@ -68,22 +92,4 @@ class DibiDateTime extends DateTime unset($this->fix); } - - public function getTimestamp() - { - return (int) $this->format('U'); - } - - - public function setTimestamp($timestamp) - { - return $this->__construct(date('Y-m-d H:i:s', $timestamp), new DateTimeZone($this->getTimezone()->getName())); // getTimeZone() crashes in PHP 5.2.6 - } - - - public function __toString() - { - return $this->format('Y-m-d H:i:s'); - } - }