A timezone changes how the same instant is displayed.

same instant The instant stays the same; the local hour changes with the timezone.

Timezone Convert

zone
timezone_convert.php
Replay: real traced execution (multi-file project)
<?php
$zone = "America/New_York";
$utc = new DateTimeImmutable("2026-05-31 12:00:00", new DateTimeZone("UTC"));
$local = $utc->setTimezone(new DateTimeZone($zone));

echo "zone=" . $zone . "\n";
echo "hour=" . $local->format("H:i") . "\n";
<?php
$zone = "Europe/London";
$utc = new DateTimeImmutable("2026-05-31 12:00:00", new DateTimeZone("UTC"));
$local = $utc->setTimezone(new DateTimeZone($zone));

echo "zone=" . $zone . "\n";
echo "hour=" . $local->format("H:i") . "\n";
<?php
$zone = "Asia/Tokyo";
$utc = new DateTimeImmutable("2026-05-31 12:00:00", new DateTimeZone("UTC"));
$local = $utc->setTimezone(new DateTimeZone($zone));

echo "zone=" . $zone . "\n";
echo "hour=" . $local->format("H:i") . "\n";
  1. $zone ← America/New_York, $utc ← DateTimeImmutable, $local ← DateTimeImmutable

    1<?php2$zone→ America/New_York = "America/New_York"; //@zone="Europe/London", "Asia/Tokyo"3$utc→ DateTimeImmutable = new DateTimeImmutable("2026-05-31 12:00:00", new DateTimeZone("UTC"));4$local→ DateTimeImmutable = $utcDateTimeImmutable->setTimezone(new DateTimeZone($zoneAmerica/New_York));56echo "zone=" . $zoneAmerica/New_York . "\n";7echo "hour=" . $localDateTimeImmutable->format("H:i") . "\n";
    outputzone=America/New_York
    hour=08:00
  1. $zone ← Europe/London, $utc ← DateTimeImmutable, $local ← DateTimeImmutable

    1<?php2$zone→ Europe/London = "Europe/London";3$utc→ DateTimeImmutable = new DateTimeImmutable("2026-05-31 12:00:00", new DateTimeZone("UTC"));4$local→ DateTimeImmutable = $utcDateTimeImmutable->setTimezone(new DateTimeZone($zoneEurope/London));56echo "zone=" . $zoneEurope/London . "\n";7echo "hour=" . $localDateTimeImmutable->format("H:i") . "\n";
    outputzone=Europe/London
    hour=13:00
  1. $zone ← Asia/Tokyo, $utc ← DateTimeImmutable, $local ← DateTimeImmutable

    1<?php2$zone→ Asia/Tokyo = "Asia/Tokyo";3$utc→ DateTimeImmutable = new DateTimeImmutable("2026-05-31 12:00:00", new DateTimeZone("UTC"));4$local→ DateTimeImmutable = $utcDateTimeImmutable->setTimezone(new DateTimeZone($zoneAsia/Tokyo));56echo "zone=" . $zoneAsia/Tokyo . "\n";7echo "hour=" . $localDateTimeImmutable->format("H:i") . "\n";
    outputzone=Asia/Tokyo
    hour=21:00