timezone_identifiers_list()
La función timezone_identifiers_list() de PHP devuelve un array con todos los identificadores de zona horaria disponibles, con opciones de filtrado.
Introducción
La función timezone_identifiers_list() devuelve un array con todos los identificadores de zona horaria que PHP conoce. Los identificadores de zona horaria son cadenas con el formato Area/Ubicación (por ejemplo America/New_York, Europe/London, Asia/Tokyo) y provienen de la base de datos de zonas horarias IANA incluida con PHP.
Esta página cubre la firma de la función, cómo interpretar su valor de retorno, cómo filtrar la lista por continente o país, y los usos más comunes en el mundo real: construir un menú desplegable de zonas horarias y validar nombres de zona horaria proporcionados por el usuario.
Sintaxis
timezone_identifiers_list(
int $timezoneGroup = DateTimeZone::ALL,
?string $countryCode = null
): arrayAmbos parámetros son opcionales y se añadieron en PHP 5.3, con el comportamiento del filtro de país refinado en versiones posteriores:
$timezoneGroup— una constante deDateTimeZoneque limita el resultado a una región, comoDateTimeZone::EUROPE,DateTimeZone::AMERICAoDateTimeZone::ASIA. El valor por defectoDateTimeZone::ALLdevuelve todos los identificadores estándar.$countryCode— un código de país de dos letras según ISO 3166-1 (por ejemplo'US','GB','IN'). Solo tiene efecto cuando$timezoneGroupestá establecido enDateTimeZone::PER_COUNTRY.
La función devuelve un array de cadenas indexado numéricamente. Los identificadores se devuelven en orden alfabético.
timezone_identifiers_list() es el alias procedimental de DateTimeZone::listIdentifiers() — ambos producen el mismo resultado.
Listar todos los identificadores
<?php
$identifiers = timezone_identifiers_list();
echo count($identifiers) . " timezones\n";
echo $identifiers[0] . "\n";
echo $identifiers[1] . "\n";Salida (el número exacto depende de tu versión de PHP/IANA):
419 timezones
Africa/Abidjan
Africa/AccraPuedes iterar sobre el array para imprimir cada zona horaria disponible:
<?php
foreach (timezone_identifiers_list() as $tz) {
echo $tz . "\n";
}Filtrar por región o país
Pasa una constante de grupo DateTimeZone para limitar la lista a un continente:
<?php
$european = timezone_identifiers_list(DateTimeZone::EUROPE);
echo $european[0] . "\n"; // Europe/AmsterdamPara obtener las zonas horarias de un solo país, usa DateTimeZone::PER_COUNTRY junto con un código de país:
<?php
$usZones = timezone_identifiers_list(DateTimeZone::PER_COUNTRY, 'US');
echo $usZones[0] . "\n"; // America/Adak
echo in_array('America/New_York', $usZones, true) ? "found\n" : "missing\n"; // foundEsto es útil cuando quieres un selector con conciencia de país — por ejemplo, mostrar solo las zonas horarias de EE. UU. después de que un usuario seleccione "United States".
Validar la entrada del usuario
Dado que la función devuelve una lista autorizada, es la forma más segura de comprobar si una cadena de zona horaria es válida antes de pasarla a DateTimeZone o date_default_timezone_set():
<?php
function isValidTimezone(string $tz): bool
{
return in_array($tz, timezone_identifiers_list(), true);
}
var_dump(isValidTimezone('Europe/London')); // bool(true)
var_dump(isValidTimezone('Mars/Olympus_Mons')); // bool(false)Aplicar un identificador
Una vez que tienes un identificador válido, establécelo como predeterminado para todo el script con date_default_timezone_set():
<?php
date_default_timezone_set('America/New_York');O crea un objeto DateTimeZone para adjuntar una zona horaria a una fecha específica sin cambiar el predeterminado global:
<?php
$timezone = new DateTimeZone('Asia/Tokyo');
$date = new DateTime('now', $timezone);
echo $date->format('Y-m-d H:i:s P');PHP también acepta un desplazamiento UTC fijo en lugar de una zona con nombre. Esto omite completamente las reglas de horario de verano:
<?php
$timezone = new DateTimeZone('-08:00');Notas y advertencias
- La lista se construye a partir de la base de datos IANA incluida con tu compilación de PHP, por lo que los identificadores exactos y el recuento pueden cambiar entre versiones de PHP. Usa
timezone_version_get()para comprobar qué versión de la base de datos está activa. - Algunos identificadores heredados están obsoletos y pueden eliminarse en versiones futuras. Prefiere los nombres canónicos
Area/Ubicaciónsobre las abreviaturas. - Para abreviaturas de zona horaria (como
CEToPST) en lugar de identificadores completos, consultatimezone_abbreviations_list(). - Para una visión más amplia sobre cómo trabajar con zonas horarias en PHP, lee PHP Timezones.