timezone_identifiers_list()
La funzione PHP timezone_identifiers_list() restituisce un array di tutti gli identificatori di fuso orario noti a PHP, con supporto al filtraggio.
Introduzione
La funzione timezone_identifiers_list() restituisce un array contenente ogni identificatore di fuso orario conosciuto da PHP. Gli identificatori di fuso orario sono stringhe nel formato Area/Location (ad esempio America/New_York, Europe/London, Asia/Tokyo) e provengono dal database dei fusi orari IANA incluso in PHP.
Questa pagina illustra la firma della funzione, come interpretarne il valore restituito, come filtrare l'elenco per continente o paese e i casi d'uso più comuni: costruire un menu a tendina per i fusi orari e validare i nomi di fuso orario forniti dall'utente.
Sintassi
timezone_identifiers_list(
int $timezoneGroup = DateTimeZone::ALL,
?string $countryCode = null
): arrayEntrambi i parametri sono opzionali e sono stati aggiunti in PHP 5.3, con il comportamento del filtro per paese perfezionato nelle versioni successive:
$timezoneGroup— una costanteDateTimeZoneche limita il risultato a una regione, ad esempioDateTimeZone::EUROPE,DateTimeZone::AMERICAoDateTimeZone::ASIA. Il valore predefinitoDateTimeZone::ALLrestituisce ogni identificatore standard.$countryCode— un codice paese di due lettere secondo ISO 3166-1 (ad esempio'US','GB','IN'). Ha effetto solo quando$timezoneGroupè impostato suDateTimeZone::PER_COUNTRY.
La funzione restituisce un array di stringhe indicizzato numericamente. Gli identificatori vengono restituiti in ordine alfabetico.
timezone_identifiers_list() è l'alias procedurale di DateTimeZone::listIdentifiers() — entrambi producono lo stesso risultato.
Elencare tutti gli identificatori
<?php
$identifiers = timezone_identifiers_list();
echo count($identifiers) . " timezones\n";
echo $identifiers[0] . "\n";
echo $identifiers[1] . "\n";Output (il numero esatto dipende dalla versione di PHP/IANA in uso):
419 timezones
Africa/Abidjan
Africa/AccraÈ possibile iterare sull'array per stampare ogni fuso orario disponibile:
<?php
foreach (timezone_identifiers_list() as $tz) {
echo $tz . "\n";
}Filtrare per regione o paese
Passa una costante di gruppo DateTimeZone per restringere l'elenco a un solo continente:
<?php
$european = timezone_identifiers_list(DateTimeZone::EUROPE);
echo $european[0] . "\n"; // Europe/AmsterdamPer ottenere i fusi orari di un singolo paese, usa DateTimeZone::PER_COUNTRY insieme a un codice paese:
<?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"; // foundQuesto risulta utile quando si vuole un selettore consapevole del paese — ad esempio, mostrare solo i fusi orari degli USA dopo che l'utente ha selezionato "United States".
Validare l'input dell'utente
Poiché la funzione restituisce un elenco autorevole, è il modo più sicuro per verificare se una stringa di fuso orario è valida prima di passarla 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)Applicare un identificatore
Una volta ottenuto un identificatore valido, impostalo come predefinito per l'intero script con date_default_timezone_set():
<?php
date_default_timezone_set('America/New_York');Oppure crea un oggetto DateTimeZone per associare un fuso orario a una data specifica senza modificare il valore predefinito globale:
<?php
$timezone = new DateTimeZone('Asia/Tokyo');
$date = new DateTime('now', $timezone);
echo $date->format('Y-m-d H:i:s P');PHP accetta anche un offset UTC fisso al posto di una zona con nome. In questo modo si saltano completamente le regole sull'ora legale:
<?php
$timezone = new DateTimeZone('-08:00');Note e avvertenze
- L'elenco è costruito dal database IANA incluso nella propria versione di PHP, quindi gli identificatori esatti e il loro numero possono cambiare tra versioni diverse di PHP. Usa
timezone_version_get()per verificare quale versione del database è attiva. - Alcuni identificatori legacy sono deprecati e potrebbero essere rimossi nelle versioni future. Preferire i nomi canonici
Area/Locationrispetto alle abbreviazioni. - Per le abbreviazioni di fuso orario (come
CEToPST) invece degli identificatori completi, consultatimezone_abbreviations_list(). - Per una panoramica più ampia sull'utilizzo dei fusi orari in PHP, leggi PHP Timezones.