Skip to content

Commit

Permalink
[VarDumper] Dumping DateTime throws error if getTimezone is false
Browse files Browse the repository at this point in the history
  • Loading branch information
bogdanmoza authored and nicolas-grekas committed Jun 20, 2023
1 parent 8e12706 commit 82269f7
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 1 deletion.
2 changes: 1 addition & 1 deletion Caster/DateCaster.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class DateCaster
public static function castDateTime(\DateTimeInterface $d, array $a, Stub $stub, bool $isNested, int $filter)
{
$prefix = Caster::PREFIX_VIRTUAL;
$location = $d->getTimezone()->getLocation();
$location = $d->getTimezone() ? $d->getTimezone()->getLocation() : null;
$fromNow = (new \DateTime())->diff($d);

$title = $d->format('l, F j, Y')
Expand Down
58 changes: 58 additions & 0 deletions Tests/Caster/DateCasterTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,52 @@ public static function provideDateTimes()
];
}

/**
* @dataProvider provideNoTimezoneDateTimes
*/
public function testCastDateTimeNoTimezone($time, $xDate, $xInfos)
{
$stub = new Stub();
$date = new NoTimezoneDate($time);
$cast = DateCaster::castDateTime($date, Caster::castObject($date, \DateTime::class), $stub, false, 0);

$xDump = <<<EODUMP
array:1 [
"\\x00~\\x00date" => $xDate
]
EODUMP;

$this->assertDumpEquals($xDump, $cast);

$xDump = <<<EODUMP
Symfony\Component\VarDumper\Caster\ConstStub {
+type: 1
+class: "$xDate"
+value: "%A$xInfos%A"
+cut: 0
+handle: 0
+refCount: 0
+position: 0
+attr: []
}
EODUMP;

$this->assertDumpMatchesFormat($xDump, $cast["\0~\0date"]);
}

public static function provideNoTimezoneDateTimes()
{
return [
['2017-04-30 00:00:00.000000', '2017-04-30 00:00:00.0 +00:00', 'Sunday, April 30, 2017'],
['2017-04-30 00:00:00.100000', '2017-04-30 00:00:00.100 +00:00', 'Sunday, April 30, 2017'],
['2017-04-30 00:00:00.120000', '2017-04-30 00:00:00.120 +00:00', 'Sunday, April 30, 2017'],
['2017-04-30 00:00:00.123000', '2017-04-30 00:00:00.123 +00:00', 'Sunday, April 30, 2017'],
['2017-04-30 00:00:00.123400', '2017-04-30 00:00:00.123400 +00:00', 'Sunday, April 30, 2017'],
['2017-04-30 00:00:00.123450', '2017-04-30 00:00:00.123450 +00:00', 'Sunday, April 30, 2017'],
['2017-04-30 00:00:00.123456', '2017-04-30 00:00:00.123456 +00:00', 'Sunday, April 30, 2017'],
];
}

public function testCastDateTimeWithAdditionalChildProperty()
{
$stub = new Stub();
Expand Down Expand Up @@ -407,3 +453,15 @@ private function createInterval($intervalSpec, $ms, $invert)
return $interval;
}
}

class NoTimezoneDate extends \DateTime
{
/**
* @return \DateTimeZone|false
*/
#[\ReturnTypeWillChange]
public function getTimezone()
{
return false;
}
}

0 comments on commit 82269f7

Please sign in to comment.