diff --git a/lib/Cake/Test/Case/Utility/CakeTimeTest.php b/lib/Cake/Test/Case/Utility/CakeTimeTest.php index 78ab94efad2..bcb17d25c6e 100644 --- a/lib/Cake/Test/Case/Utility/CakeTimeTest.php +++ b/lib/Cake/Test/Case/Utility/CakeTimeTest.php @@ -846,7 +846,7 @@ public function testFromStringWithDateTime() { $date = new DateTime('+1 hour', new DateTimeZone('America/New_York')); $result = $this->Time->fromString($date, 'UTC'); $date->setTimezone(new DateTimeZone('UTC')); - $expected = $date->format('U') + $date->getOffset(); + $expected = $date->getTimestamp() + $date->getOffset(); $this->assertWithinMargin($expected, $result, 1); @@ -854,6 +854,7 @@ public function testFromStringWithDateTime() { $date = new DateTime('+1 hour', new DateTimeZone('America/New_York')); $result = $this->Time->fromString($date, 'Asia/Kuwait'); + $date->setTimezone(new DateTimeZone('Asia/Kuwait')); $expected = $date->format('U') + $date->getOffset(); $this->assertWithinMargin($expected, $result, 1); @@ -861,6 +862,18 @@ public function testFromStringWithDateTime() { $this->_restoreSystemTimezone(); } +/** + * Test that datetimes in the default timezone are not modified. + * + * @return void + */ + public function testFromStringWithDateTimeNoConversion() { + Configure::write('Config.timezone', date_default_timezone_get()); + $date = new DateTime('2013-04-09'); + $result = $this->Time->fromString($date); + $this->assertEquals($result, $date->getTimestamp()); + } + /** * test converting time specifiers using a time definition localfe file * diff --git a/lib/Cake/Utility/CakeTime.php b/lib/Cake/Utility/CakeTime.php index 95da85d84d1..09698d1aa52 100644 --- a/lib/Cake/Utility/CakeTime.php +++ b/lib/Cake/Utility/CakeTime.php @@ -319,10 +319,15 @@ public static function fromString($dateString, $timezone = null) { if (is_int($dateString) || is_numeric($dateString)) { $date = intval($dateString); - } elseif (is_object($dateString) && $dateString instanceof DateTime) { + } elseif ( + $dateString instanceof DateTime && + $dateString->getTimezone()->getName() != date_default_timezone_get() + ) { $clone = clone $dateString; $clone->setTimezone(new DateTimeZone(date_default_timezone_get())); - $date = (int)$clone->format('U') + $clone->getOffset(); + $date = (int)$clone->getTimestamp() + $clone->getOffset(); + } elseif ($dateString instanceof DateTime) { + $date = (int)$dateString->getTimeStamp(); } else { $date = strtotime($dateString); }