timezone_abbreviations_list()
Aprenda a usar timezone_abbreviations_list() e DateTimeZone::listAbbreviations() em PHP para obter abreviações de fuso horário e identificadores IANA.
Introdução
Uma abreviação de fuso horário é um código curto de 2 a 5 letras, como EST, GMT ou CEST, que identifica o deslocamento de uma região em relação ao Tempo Universal Coordenado (UTC). O PHP pode listar todas as abreviações que conhece, juntamente com os identificadores de fuso horário IANA (como America/New_York) para os quais cada uma aponta.
Este capítulo explica como recuperar essa lista, por que as abreviações não são confiáveis por si só, e fornece uma tabela de referência com os códigos mais comuns.
timezone_abbreviations_list() foi descontinuada no PHP 8.1 e removida no PHP 8.2. No PHP 8.2 e versões posteriores, use o equivalente DateTimeZone::listAbbreviations(). Ambas retornam a mesma estrutura de dados.
Por que as abreviações são ambíguas
Ao contrário dos identificadores IANA, as abreviações não são únicas. CST sozinho pode significar Horário Padrão Central (América do Norte, UTC-6), Horário Padrão da China (UTC+8) ou Horário Padrão de Cuba. BST pode ser Horário de Verão Britânico ou Horário Padrão de Bangladesh. Como o mesmo código pode corresponder a várias regiões, você nunca deve armazenar ou configurar um fuso horário pela sua abreviação. Sempre resolva para um identificador IANA (por exemplo Europe/London) e passe-o para date_default_timezone_set() ou para um objeto DateTimeZone.
É exatamente para isso que serve a lista de abreviações: converter um código recebido (por exemplo, de entrada do usuário) nos identificadores candidatos que ele pode representar — veja timezone_name_from_abbr() para selecionar uma correspondência única.
Listando todas as abreviações
Ambas as funções retornam um array associativo. Cada chave é uma abreviação em minúsculas; cada valor é um array de zonas, onde cada zona possui três campos:
dst—truese a entrada for uma variante de horário de verão.offset— o deslocamento UTC em segundos.timezone_id— o identificador IANA (pode sernullpara deslocamentos sem zona nomeada).
<?php
// PHP 8.2+ (use timezone_abbreviations_list() on older versions)
$abbreviations = DateTimeZone::listAbbreviations();
print_r($abbreviations['acst']);Saída:
Array
(
[0] => Array
(
[dst] =>
[offset] => 34200
[timezone_id] => Australia/Adelaide
)
...
)O deslocamento 34200 segundos equivale a 34200 / 3600 = 9,5 horas, ou seja, UTC+9:30.
Mapeando abreviações para identificadores e deslocamentos
Para transformar a estrutura bruta em linhas legíveis, itere o array externo e depois cada zona:
<?php
$abbreviations = DateTimeZone::listAbbreviations();
foreach ($abbreviations as $abbr => $zones) {
foreach ($zones as $zone) {
$hours = $zone['offset'] / 3600;
printf(
"%-5s => %-25s (UTC %+.1f)\n",
strtoupper($abbr),
$zone['timezone_id'] ?? '(unnamed)',
$hours
);
}
}Algumas linhas de exemplo da saída:
GMT => Europe/London (UTC +0.0)
GMT => Africa/Abidjan (UTC +0.0)
CET => Europe/Paris (UTC +1.0)A lista é extensa (milhares de linhas), por isso na prática você a filtra pelos códigos de seu interesse em vez de imprimir tudo.
Abreviações de fuso horário comuns
Abaixo está uma lista de referência das abreviações de fuso horário mais comuns (as chaves do array estão em minúsculas no PHP; exibidas em maiúsculas aqui para facilitar a leitura):
- ACDT - Horário de Verão da Austrália Central
- ACST - Horário Padrão da Austrália Central
- ACT - Horário do Acre
- ADT - Horário de Verão do Atlântico
- AEDT - Horário de Verão da Austrália Oriental
- AEST - Horário Padrão da Austrália Oriental
- AFT - Horário do Afeganistão
- AKDT - Horário de Verão do Alasca
- AKST - Horário Padrão do Alasca
- AMST - Horário de Verão da Amazônia
- AMT - Horário da Amazônia
- ART - Horário da Argentina
- AST - Horário Padrão do Atlântico
- AWST - Horário Padrão da Austrália Ocidental
- AZOST - Horário Padrão dos Açores
- AZT - Horário do Azerbaijão
- BDT - Horário de Brunei
- BNT - Horário de Brunei Darussalam
- BOT - Horário da Bolívia
- BRST - Horário de Verão de Brasília
- BRT - Horário de Brasília
- BST - Horário de Verão Britânico
- BTT - Horário do Butão
- CAT - Horário da África Central
- CCT - Horário das Ilhas Cocos
- CDT - Horário de Verão Central
- CEST - Horário de Verão da Europa Central
- CET - Horário da Europa Central
- CHADT - Horário de Verão da Ilha Chatham
- CHAST - Horário Padrão da Ilha Chatham
- CHOT - Horário Padrão de Choibalsan
- CHST - Horário Padrão de Chamorro
- CHT - Horário de Chuuk
- CKT - Horário das Ilhas Cook
- CLST - Horário de Verão do Chile
- CLT - Horário Padrão do Chile
- COT - Horário da Colômbia
- CST - Horário Padrão Central
- CT - Horário Central
- CVT - Horário de Cabo Verde
- CWST - Horário Padrão da Austrália Centro-Ocidental
- CXT - Horário da Ilha Christmas
- DAVT - Horário de Davis
- DDUT - Horário de Dumont-d'Urville
- EASST - Horário de Verão da Ilha de Páscoa
- EAST - Horário Padrão da Ilha de Páscoa
- EAT - Horário da África Oriental
- ECT - Horário do Caribe Oriental
- EDT - Horário de Verão Oriental
- EEST - Horário de Verão da Europa Oriental
- EET - Horário da Europa Oriental
- EGST - Horário de Verão da Groenlândia Oriental
- EGT - Horário da Groenlândia Oriental
- EIT - Horário da Indonésia Oriental
- EST - Horário Padrão Oriental
- FET - Horário da Europa Mais Oriental
- FJT - Horário de Fiji
- FKST - Horário de Verão das Ilhas Malvinas
- FKT - Horário das Ilhas Malvinas
- FNT - Horário de Fernando de Noronha
- GALT - Horário das Galápagos
- GAMT - Horário das Ilhas Gambier
- GET - Horário Padrão da Geórgia
- GFT - Horário da Guiana Francesa
- GILT - Horário da Ilha Gilbert
- GIT - Horário da Ilha Gambier
- GMT - Horário Médio de Greenwich
- GST - Horário Padrão do Golfo
- GYT - Horário da Guiana
- HADT - Horário de Verão Havaí-Aleutas
- HAST - Horário Padrão Havaí-Aleutas
- HKT - Horário de Hong Kong
- HST - Horário Padrão do Havaí
- ICT - Horário da Indochina
- IDT - Horário de Verão de Israel
- IRDT - Horário de Verão do Irã
- IRST - Horário Padrão do Irã
- IST - Horário Padrão da Índia / Irlanda / Israel (ambíguo)
- JST - Horário Padrão do Japão
- KST - Horário Padrão da Coreia
- MDT - Horário de Verão das Montanhas
- MSK - Horário Padrão de Moscou
- MST - Horário Padrão das Montanhas
- NZDT - Horário de Verão da Nova Zelândia
- NZST - Horário Padrão da Nova Zelândia
- PDT - Horário de Verão do Pacífico
- PHT - Horário das Filipinas
- PKT - Horário Padrão do Paquistão
- PST - Horário Padrão do Pacífico
- SGT - Horário de Singapura
- UTC - Tempo Universal Coordenado
- WAT - Horário da África Ocidental
- WEST - Horário de Verão da Europa Ocidental
- WET - Horário da Europa Ocidental
- WIB - Horário da Indonésia Ocidental
- WITA - Horário da Indonésia Central
A lista acima é um subconjunto comum. DateTimeZone::listAbbreviations() retorna o array completo de todas as abreviações registradas, que você deve iterar programaticamente (como mostrado acima) em vez de depender de uma lista mantida manualmente.
Funções relacionadas
- PHP Timezones — visão geral de
DateTimeZonee identificadores IANA. timezone_identifiers_list()— lista todos os identificadores IANA suportados pelo PHP.timezone_name_from_abbr()— resolve uma única abreviação para um identificador.date_default_timezone_set()— define o fuso horário padrão do script.