Signatur
Beschreibung
Die Funktion geoip_time_zone_by_country_and_region() gehört zur GeoIP-Erweiterung (PECL geoip) und liefert den IANA-Zeitzonennamen (z. B. America/New_York oder Europe/Berlin), der einem ISO-3166-1-alpha-2-Ländercode in Kombination mit einem optionalen Regionscode zugeordnet ist.
Typischer Einsatzfall ist die automatische Vorauswahl der Zeitzone in Benutzeroberflächen oder die korrekte Umrechnung von Zeitstempeln, sobald der geografische Standort eines Nutzers bekannt ist – etwa nach einer IP-Geolocation-Abfrage. Der Regionscode entspricht dem für US-Bundesstaaten verwendeten FIPS-10-4- bzw. ISO-3166-2-Code (z. B. CA für Kalifornien).
Für Länder mit nur einer Zeitzone kann der Parameter region_code leer gelassen werden. Bei Ländern mit mehreren Zeitzonen (USA, Kanada, Australien, Russland usw.) ist die Angabe des Regionscodes notwendig, um eine eindeutige Zeitzone zu erhalten.
Die Funktion ist nur verfügbar, wenn die PECL-Erweiterung geoip installiert und eine passende GeoIP-Datenbank konfiguriert ist. Rückgabe ist false, wenn kein passendes Ergebnis gefunden wurde.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $country_code Pflicht | string | Zweistelliger ISO-3166-1-alpha-2-Ländercode in Großbuchstaben, z. B. DE für Deutschland oder US für die Vereinigten Staaten. |
|
| $region_code | string | Optionaler Regionscode (FIPS-10-4 oder ISO 3166-2-Subkode), z. B. CA für Kalifornien oder BY für Bayern. Notwendig bei Ländern mit mehreren Zeitzonen. |
Rückgabewert
Europe/Berlin), oder false, wenn kein passender Eintrag für den angegebenen Land-/Regionscode gefunden wurde.Beispiele
Zeitzone für Deutschland ohne Regionscode
<?php
// Voraussetzung: PECL geoip-Erweiterung ist installiert
$timezone = geoip_time_zone_by_country_and_region('DE');
if ($timezone !== false) {
echo "Zeitzone für Deutschland: " . $timezone . PHP_EOL;
} else {
echo "Keine Zeitzone gefunden." . PHP_EOL;
}
Zeitzone für einen US-Bundesstaat (Kalifornien)
<?php
// Für die USA ist ein Regionscode erforderlich, da mehrere Zeitzonen existieren
$timezone = geoip_time_zone_by_country_and_region('US', 'CA');
if ($timezone !== false) {
echo "Zeitzone für Kalifornien: " . $timezone . PHP_EOL;
// Zeitzone direkt in DateTimeZone verwenden
$dtz = new DateTimeZone($timezone);
$dt = new DateTime('now', $dtz);
echo "Aktuelle Uhrzeit: " . $dt->format('Y-m-d H:i:s T') . PHP_EOL;
} else {
echo "Keine Zeitzone gefunden." . PHP_EOL;
}
Kombination mit IP-Geolocation
<?php
// Typischer Workflow: IP -> Land & Region -> Zeitzone
$ip = '8.8.8.8';
$record = geoip_record_by_name($ip);
if ($record) {
$countryCode = $record['country_code'];
$regionCode = $record['region']; // z. B. 'CA' für Kalifornien
$timezone = geoip_time_zone_by_country_and_region($countryCode, $regionCode);
echo "Land: $countryCode, Region: $regionCode, Zeitzone: $timezone" . PHP_EOL;
} else {
echo "GeoIP-Daten nicht verfügbar." . PHP_EOL;
}
// Wichtig · Fallstricke
PECL-Abhängigkeit: Diese Funktion steht nur zur Verfügung, wenn die geoip-Erweiterung aus PECL installiert ist (pecl install geoip). Sie ist kein Bestandteil der PHP-Standarddistribution.
Datenbankversionierung: Die zurückgegebenen Zeitzonen hängen von der installierten GeoIP-Datenbank ab. Veraltete Datenbanken können veraltete oder fehlende Zuordnungen enthalten. Für produktive Systeme empfiehlt sich eine regelmäßige Aktualisierung der Datenbank.
Alternative: Da die PECL-geoip-Erweiterung seit einigen Jahren kaum noch aktiv gepflegt wird, sind Alternativen wie MaxMind GeoIP2 PHP API oder das Paket geocoder-php/provider oft die modernere Wahl für neue Projekte.
Regionscodes: Die erwarteten Regionscodes unterscheiden sich je nach Land – für die USA und Kanada werden zweistellige Buchstabenkürzel erwartet, für andere Länder kann das Format abweichen. Im Zweifelsfall sollte die GeoIP-Dokumentation konsultiert werden.