diff --git a/src/Chronos.php b/src/Chronos.php index 6d8e3029..409a2e7f 100644 --- a/src/Chronos.php +++ b/src/Chronos.php @@ -96,7 +96,7 @@ public function __construct($time = null, $tz = null) } if ($tz !== $testInstance->getTimezone()) { - $testInstance = $testInstance->setTimezone($tz); + $testInstance = $testInstance->setTimezone($tz === null ? date_default_timezone_get() : $tz); } $time = $testInstance->format('Y-m-d H:i:s.u'); diff --git a/src/Date.php b/src/Date.php index 9a7ff362..aa20414c 100644 --- a/src/Date.php +++ b/src/Date.php @@ -73,7 +73,7 @@ public function __construct($time = null, $tz = null) } if ($tz !== $testInstance->getTimezone()) { - $testInstance = $testInstance->setTimezone($tz); + $testInstance = $testInstance->setTimezone($tz === null ? date_default_timezone_get() : $tz); } $time = $testInstance->format('Y-m-d 00:00:00'); diff --git a/src/MutableDate.php b/src/MutableDate.php index bf7b673d..9b5d5b74 100644 --- a/src/MutableDate.php +++ b/src/MutableDate.php @@ -68,14 +68,14 @@ public function __construct($time = null, $tz = null) return parent::__construct($time, $tz); } - $testInstance = static::getTestNow(); + $testInstance = clone static::getTestNow(); if ($relative) { - $testInstance = clone $testInstance; + $testInstance = $testInstance; $testInstance = $testInstance->modify($time); } if ($tz !== $testInstance->getTimezone()) { - $testInstance = $testInstance->setTimezone($tz); + $testInstance = $testInstance->setTimezone($tz === null ? date_default_timezone_get() : $tz); } $time = $testInstance->format('Y-m-d 00:00:00'); diff --git a/src/MutableDateTime.php b/src/MutableDateTime.php index 4f5b507c..4f1767cc 100644 --- a/src/MutableDateTime.php +++ b/src/MutableDateTime.php @@ -65,14 +65,14 @@ public function __construct($time = null, $tz = null) return parent::__construct($time, $tz); } - $testInstance = static::getTestNow(); + $testInstance = clone static::getTestNow(); if ($relative) { - $testInstance = clone $testInstance; + $testInstance = $testInstance; $testInstance = $testInstance->modify($time); } if ($tz !== $testInstance->getTimezone()) { - $testInstance = $testInstance->setTimezone($tz); + $testInstance = $testInstance->setTimezone($tz === null ? date_default_timezone_get() : $tz); } $time = $testInstance->format('Y-m-d H:i:s.u'); diff --git a/tests/DateTime/TestingAidsTest.php b/tests/DateTime/TestingAidsTest.php index eaa83c7e..28224f17 100644 --- a/tests/DateTime/TestingAidsTest.php +++ b/tests/DateTime/TestingAidsTest.php @@ -14,6 +14,7 @@ namespace Cake\Chronos\Test\DateTime; use TestCase; +use DateTimeZone; class TestingAidsTest extends TestCase { @@ -158,4 +159,19 @@ public function testTimeZoneWithTestValueSet($class) $this->assertSame('2013-07-01T11:00:00-05:00', $class::parse('now', 'America/Mexico_City')->toIso8601String()); $this->assertSame('2013-07-01T09:00:00-07:00', $class::parse('now', 'America/Vancouver')->toIso8601String()); } + + /** + * @dataProvider classNameProvider + * @return void + */ + public function testNullTimezone($class) + { + $c = new $class('2016-01-01 00:00:00', 'Europe/Copenhagen'); + $class::setTestNow($c); + + $result = new $class('now', null); + $this->assertEquals(new DateTimeZone('America/Toronto'), $result->tz); + $this->assertEquals('2015-12-31 18:00:00', $result->format('Y-m-d H:i:s')); + $this->assertEquals(new DateTimeZone('Europe/Copenhagen'), $class::getTestNow()->tz); + } } diff --git a/tests/TestCase.php b/tests/TestCase.php index 7e39b127..e49fb8a4 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -33,6 +33,10 @@ protected function setUp() protected function tearDown() { date_default_timezone_set($this->saveTz); + MutableDateTime::setTestNow(null); + Chronos::setTestNow(null); + MutableDate::setTestNow(null); + Date::setTestNow(null); } public function classNameProvider()