Skip to content

Commit bd62c29

Browse files
committed
Helpers::dump() native dumping of DateTime & DateTimeImmutable
1 parent 2cd0d0e commit bd62c29

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

src/PhpGenerator/Helpers.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,12 +102,16 @@ private static function _dump(& $var, $level = 0)
102102
throw new Nette\InvalidArgumentException('Cannot dump closure.');
103103

104104
} elseif (is_object($var)) {
105+
$class = get_class($var);
105106
if (PHP_VERSION_ID >= 70000 && (new \ReflectionObject($var))->isAnonymous()) {
106107
throw new Nette\InvalidArgumentException('Cannot dump anonymous class.');
108+
109+
} elseif (in_array($class, ['DateTime', 'DateTimeImmutable'], TRUE)) {
110+
return self::formatArgs("new $class(?, new DateTimeZone(?))", [$var->format('Y-m-d H:i:s.u'), $var->getTimeZone()->getName()]);
107111
}
112+
108113
$arr = (array) $var;
109114
$space = str_repeat("\t", $level);
110-
$class = get_class($var);
111115

112116
static $list = [];
113117
if ($level > self::MAX_DEPTH || in_array($var, $list, TRUE)) {

tests/PhpGenerator/Helpers.dump().phpt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,3 +94,21 @@ Assert::equal(new Test3, eval('return ' . Helpers::dump(new Test3) . ';'));
9494
Assert::exception(function () {
9595
Helpers::dump(function () {});
9696
}, Nette\InvalidArgumentException::class, 'Cannot dump closure.');
97+
98+
99+
100+
class TestDateTime extends DateTime
101+
{}
102+
103+
Assert::same(
104+
"new DateTime('2016-06-22 20:52:43.123400', new DateTimeZone('Europe/Prague'))",
105+
Helpers::dump(new DateTime('2016-06-22 20:52:43.1234', new DateTimeZone('Europe/Prague')))
106+
);
107+
Assert::same(
108+
"new DateTimeImmutable('2016-06-22 20:52:43.123400', new DateTimeZone('Europe/Prague'))",
109+
Helpers::dump(new DateTimeImmutable('2016-06-22 20:52:43.1234', new DateTimeZone('Europe/Prague')))
110+
);
111+
Assert::match(
112+
"Nette\\PhpGenerator\\Helpers::createObject('TestDateTime', %A%)",
113+
Helpers::dump(new TestDateTime('2016-06-22 20:52:43.1234', new DateTimeZone('Europe/Prague')))
114+
);

0 commit comments

Comments
 (0)