If you construct DateTimeZone from locale name, like "Europe/Moscow", getName() returns named timezone from list.
<?php
$tz = new \DateTimeZone('Europe/Moscow');
echo $tz->getName(); // Europe/Moscow
?>
But if you use offset string, like "+0300", getName() returns new offset string instead of name.
<?php
$tz = new \DateTimeZone('+0300');
echo $tz->getName(); // +03:00
?>
It makes sense, but it's not obvious and not documented there.