W3docs

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
): array

Ambos 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 de DateTimeZone que limita el resultado a una región, como DateTimeZone::EUROPE, DateTimeZone::AMERICA o DateTimeZone::ASIA. El valor por defecto DateTimeZone::ALL devuelve 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 $timezoneGroup está establecido en DateTimeZone::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/Accra

Puedes 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/Amsterdam

Para 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"; // found

Esto 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ón sobre las abreviaturas.
  • Para abreviaturas de zona horaria (como CET o PST) en lugar de identificadores completos, consulta timezone_abbreviations_list().
  • Para una visión más amplia sobre cómo trabajar con zonas horarias en PHP, lee PHP Timezones.

Práctica

Práctica

Práctica
¿Cuál de los siguientes es un identificador de zona horaria válido en PHP?
¿Cuál de los siguientes es un identificador de zona horaria válido en PHP?
Was this page helpful?