I can't figure out how timezones work. Why this code produces zero as ouput? Shouldn't it return 10800 instead of 0?
$myZone = new DateTimeZone('+0300');
$utcZone = new DateTimeZone('+0000');
$dateA = new DateTime('now', $myZone);
var_dump($utcZone->getOffset($dateA)); // 0
$dateA->setTimezone($utcZone);
var_dump($utcZone->getOffset($dateA)); // 0
$dateA->modify('+ 3600 seconds');
var_dump($utcZone->getOffset($dateA)); // 0
It seems like $utcZone->getOffset(...) does not care about it's argument timezone and time diff at all. Where is the logic?