timezone_abbreviations_list()
Aprende a usar timezone_abbreviations_list() y DateTimeZone::listAbbreviations() en PHP para obtener abreviaturas de zona horaria e identificadores IANA.
Introducción
Una abreviatura de zona horaria es un código corto de 2 a 5 letras como EST, GMT o CEST que identifica el desplazamiento de una región respecto al Tiempo Universal Coordinado (UTC). PHP puede listar todas las abreviaturas que conoce, junto con los identificadores de zona horaria IANA (como America/New_York) a los que corresponden.
Este capítulo explica cómo obtener esa lista, por qué las abreviaturas son poco confiables por sí solas, y ofrece una tabla de referencia de los códigos más comunes.
timezone_abbreviations_list() fue obsoleta en PHP 8.1 y eliminada en PHP 8.2. En PHP 8.2 y versiones posteriores, utiliza en su lugar el equivalente DateTimeZone::listAbbreviations(). Ambas devuelven la misma estructura de datos.
Por qué las abreviaturas son ambiguas
A diferencia de los identificadores IANA, las abreviaturas no son únicas. CST por sí solo puede significar Central Standard Time (América del Norte, UTC-6), China Standard Time (UTC+8) o Cuba Standard Time. BST puede ser British Summer Time o Bangladesh Standard Time. Dado que el mismo código puede referirse a varias regiones, nunca debes almacenar o configurar una zona horaria usando su abreviatura. Resuelve siempre a un identificador IANA (por ejemplo, Europe/London) y utilízalo en date_default_timezone_set() o en un objeto DateTimeZone.
Para eso es exactamente la lista de abreviaturas: convertir un código recibido (por ejemplo, de la entrada del usuario) en los identificadores candidatos que podría representar. Consulta timezone_name_from_abbr() para seleccionar una coincidencia concreta.
Listar todas las abreviaturas
Ambas funciones devuelven un array asociativo. Cada clave es una abreviatura en minúsculas; cada valor es un array de zonas, donde cada zona tiene tres campos:
dst—truesi la entrada corresponde a una variante de horario de verano.offset— el desplazamiento UTC en segundos.timezone_id— el identificador IANA (puede sernullpara desplazamientos sin zona con nombre).
<?php
// PHP 8.2+ (use timezone_abbreviations_list() on older versions)
$abbreviations = DateTimeZone::listAbbreviations();
print_r($abbreviations['acst']);Salida:
Array
(
[0] => Array
(
[dst] =>
[offset] => 34200
[timezone_id] => Australia/Adelaide
)
...
)El desplazamiento de 34200 segundos equivale a 34200 / 3600 = 9.5 horas, es decir, UTC+9:30.
Mapear abreviaturas a identificadores y desplazamientos
Para convertir la estructura sin procesar en filas legibles, itera el array externo y luego 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
);
}
}Algunas líneas de muestra de la salida:
GMT => Europe/London (UTC +0.0)
GMT => Africa/Abidjan (UTC +0.0)
CET => Europe/Paris (UTC +1.0)La lista es extensa (miles de filas), por lo que en la práctica la filtras a los códigos que te interesan en lugar de imprimirla completa.
Abreviaturas de zona horaria comunes
A continuación se muestra una lista de referencia de abreviaturas de zona horaria comunes (las claves del array están en minúsculas en PHP; aquí se muestran en mayúsculas para mayor legibilidad):
- ACDT - Australian Central Daylight Time
- ACST - Australian Central Standard Time
- ACT - Acre Time
- ADT - Atlantic Daylight Time
- AEDT - Australian Eastern Daylight Time
- AEST - Australian Eastern Standard Time
- AFT - Afghanistan Time
- AKDT - Alaska Daylight Time
- AKST - Alaska Standard Time
- AMST - Amazon Summer Time
- AMT - Amazon Time
- ART - Argentina Time
- AST - Atlantic Standard Time
- AWST - Australian Western Standard Time
- AZOST - Azores Standard Time
- AZT - Azerbaijan Time
- BDT - Brunei Time
- BNT - Brunei Darussalam Time
- BOT - Bolivia Time
- BRST - Brasilia Summer Time
- BRT - Brasilia Time
- BST - British Summer Time
- BTT - Bhutan Time
- CAT - Central Africa Time
- CCT - Cocos Islands Time
- CDT - Central Daylight Time
- CEST - Central European Summer Time
- CET - Central European Time
- CHADT - Chatham Island Daylight Time
- CHAST - Chatham Island Standard Time
- CHOT - Choibalsan Standard Time
- CHST - Chamorro Standard Time
- CHT - Chuuk Time
- CKT - Cook Island Time
- CLST - Chile Summer Time
- CLT - Chile Standard Time
- COT - Colombia Time
- CST - Central Standard Time
- CT - Central Time
- CVT - Cape Verde Time
- CWST - Central Western Standard Time
- CXT - Christmas Island Time
- DAVT - Davis Time
- DDUT - Dumont-d'Urville Time
- EASST - Easter Island Summer Time
- EAST - Easter Island Standard Time
- EAT - Eastern Africa Time
- ECT - Eastern Caribbean Time
- EDT - Eastern Daylight Time
- EEST - Eastern European Summer Time
- EET - Eastern European Time
- EGST - Eastern Greenland Summer Time
- EGT - Eastern Greenland Time
- EIT - Eastern Indonesian Time
- EST - Eastern Standard Time
- FET - Further Eastern European Time
- FJT - Fiji Time
- FKST - Falkland Islands Summer Time
- FKT - Falkland Islands Time
- FNT - Fernando de Noronha Time
- GALT - Galapagos Time
- GAMT - Gambier Islands Time
- GET - Georgia Standard Time
- GFT - French Guiana Time
- GILT - Gilbert Island Time
- GIT - Gambier Island Time
- GMT - Greenwich Mean Time
- GST - Gulf Standard Time
- GYT - Guyana Time
- HADT - Hawaii-Aleutian Daylight Time
- HAST - Hawaii-Aleutian Standard Time
- HKT - Hong Kong Time
- HST - Hawaii Standard Time
- ICT - Indochina Time
- IDT - Israel Daylight Time
- IRDT - Iran Daylight Time
- IRST - Iran Standard Time
- IST - India / Irish / Israel Standard Time (ambiguous)
- JST - Japan Standard Time
- KST - Korea Standard Time
- MDT - Mountain Daylight Time
- MSK - Moscow Standard Time
- MST - Mountain Standard Time
- NZDT - New Zealand Daylight Time
- NZST - New Zealand Standard Time
- PDT - Pacific Daylight Time
- PHT - Philippine Time
- PKT - Pakistan Standard Time
- PST - Pacific Standard Time
- SGT - Singapore Time
- UTC - Coordinated Universal Time
- WAT - West Africa Time
- WEST - Western European Summer Time
- WET - Western European Time
- WIB - Western Indonesian Time
- WITA - Central Indonesian Time
La lista anterior es un subconjunto común. DateTimeZone::listAbbreviations() devuelve el array completo de todas las abreviaturas registradas, que deberías iterar mediante programación (como se muestra arriba) en lugar de depender de una lista mantenida manualmente.
Funciones relacionadas
- PHP Timezones — descripción general de
DateTimeZonee identificadores IANA. timezone_identifiers_list()— lista todos los identificadores IANA que PHP admite.timezone_name_from_abbr()— resuelve una abreviatura a un único identificador.date_default_timezone_set()— establece la zona horaria predeterminada del script.