timezone_location_get()
PHP timezone_location_get() retorna um array com código de país, latitude, longitude e comentários para um DateTimeZone. Sintaxe, exemplos e dicas.
Função PHP timezone_location_get()
A função timezone_location_get() retorna a localização geográfica associada a um fuso horário — seu país, latitude e longitude. Isso é útil quando você tem um fuso horário (por exemplo, o vinculado à conta de um usuário) e precisa saber onde no mundo ele aponta, em vez de apenas qual é o deslocamento do relógio.
Esta página aborda o que a função retorna, sua sintaxe e parâmetro, exemplos executáveis, armadilhas comuns e como ela se relaciona com outros auxiliares de fuso horário do PHP.
Sintaxe
<?php
timezone_location_get(DateTimeZone $object): array|falsetimezone_location_get() é o alias procedural do método DateTimeZone::getLocation(), portanto $tz->getLocation() e timezone_location_get($tz) são intercambiáveis.
Parâmetro
| Parâmetro | Tipo | Descrição |
|---|---|---|
$object | DateTimeZone | Obrigatório. Um objeto DateTimeZone cuja localização você deseja ler. |
Observe que — ao contrário de muitas outras funções de fuso horário — esta recebe um objeto DateTimeZone, não uma string de fuso horário. Para construir o objeto a partir de uma string, use new DateTimeZone("Europe/London") ou timezone_open().
Valor de Retorno
Em caso de sucesso, a função retorna um array associativo com estas chaves:
| Chave | Descrição |
|---|---|
country_code | Código de país ISO 3166 de duas letras (ex.: GB), ou ?? quando desconhecido. |
latitude | Latitude em graus decimais. |
longitude | Longitude em graus decimais. |
comments | Uma nota curta sobre a localização; frequentemente uma string vazia. |
Retorna false se as informações de localização não estiverem disponíveis para o fuso horário fornecido.
Exemplos
Lendo a localização de um fuso horário
Aqui construímos um DateTimeZone para "Europe/London" e exibimos seus dados de localização:
Saída:
Array
(
[country_code] => GB
[latitude] => 51.50833
[longitude] => -0.12528
[comments] =>
)A função retorna um array associativo descrevendo onde o fuso horário está ancorado. Observe que comments é vazio para muitas zonas — não dependa de ele estar preenchido.
Usando o equivalente orientado a objetos
timezone_location_get($tz) é apenas um alias para DateTimeZone::getLocation(). O seguinte imprime o mesmo array:
<?php
$timezone = new DateTimeZone("America/Los_Angeles");
print_r($timezone->getLocation());Saída:
Array
(
[country_code] => US
[latitude] => 34.05222
[longitude] => -118.24278
[comments] => Pacific
)Calculando a distância entre dois fusos horários
Como a função fornece coordenadas reais, você pode fazer cálculos geográficos com elas — por exemplo, a distância de grande círculo (em quilômetros) entre duas zonas:
<?php
$a = timezone_location_get(new DateTimeZone("Europe/London"));
$b = timezone_location_get(new DateTimeZone("America/New_York"));
$earthRadius = 6371; // km
$dLat = deg2rad($b["latitude"] - $a["latitude"]);
$dLon = deg2rad($b["longitude"] - $a["longitude"]);
$h = sin($dLat / 2) ** 2
+ cos(deg2rad($a["latitude"])) * cos(deg2rad($b["latitude"]))
* sin($dLon / 2) ** 2;
$distance = 2 * $earthRadius * asin(sqrt($h));
echo round($distance) . " km";Saída:
5570 kmArmadilhas Comuns
- Precisa de um objeto, não de uma string. Passar
"Europe/London"diretamente gera umTypeError. Envolva a string emnew DateTimeZone(...)primeiro. commentsfrequentemente está vazio. Trate-o como metadado opcional, não como um rótulo que você pode exibir aos usuários.- Zonas somente com deslocamento não têm localização. Um
DateTimeZonecriado a partir de um deslocamento como"+02:00"não está vinculado a um lugar, então a chamada retornafalse. - Identificadores inválidos falham cedo. No PHP 8.0+, construir
new DateTimeZone("Not/AZone")lança umaDateInvalidTimeZoneException(umValueErrorantes disso), então o erro aparece no momento da construção, não emtimezone_location_get().
Funções Relacionadas
timezone_open()— criar umDateTimeZonea partir de uma string.timezone_name_get()— obter o nome de um fuso horário.timezone_offset_get()— obter o deslocamento UTC de um fuso horário.timezone_identifiers_list()— listar todos os identificadores de fuso horário suportados.- PHP Timezones — visão geral sobre como trabalhar com fusos horários no PHP.
Conclusão
timezone_location_get() converte um objeto DateTimeZone em dados geográficos concretos — código de país, latitude e longitude — que você pode usar para mapeamento, cálculos de distância ou simplesmente para mostrar aos usuários onde um fuso horário fica. Lembre-se de passar um objeto DateTimeZone (não uma string) e de tratar o retorno false para zonas somente com deslocamento.