timezone_open()
La funzione timezone_open in PHP crea un nuovo oggetto DateTimeZone a partire da un identificatore di fuso orario.
La funzione PHP timezone_open()
timezone_open() crea un nuovo oggetto DateTimeZone a partire da un identificatore di fuso orario. È l'alias in stile procedurale di new DateTimeZone() — entrambi fanno esattamente la stessa cosa, quindi puoi usare quello che meglio si adatta al tuo stile di codice.
Un oggetto DateTimeZone da solo non "fa" nulla. Il suo compito è essere passato a un oggetto DateTime affinché i timestamp vengano interpretati e visualizzati nel fuso orario corretto. Questo è ciò che rende utile timezone_open(): permette a uno script di mostrare lo stesso istante nel tempo correttamente per utenti a New York, Parigi o Tokyo.
Sintassi
timezone_open(string $timezone): DateTimeZone|falseParametro
$timezone— un identificatore di fuso orario. Usa un nome IANA completo come"America/New_York","Europe/Paris"o"UTC". Le abbreviazioni come"EST"sono accettate ma ambigue e meglio evitarle. L'elenco completo proviene datimezone_identifiers_list().
Valore restituito
- Un oggetto
DateTimeZonein caso di successo. falsese l'identificatore non è riconosciuto (viene anche generato unWarning). Per questo motivo, valida sempre gli identificatori forniti dagli utenti prima di passarli alla funzione.
Esempi pratici
Esempio 1: Impostare il fuso orario predefinito
timezone_open() non cambia il fuso orario predefinito dello script — questo è il compito di date_default_timezone_set(). Impostalo una volta all'inizio dello script in modo che qualsiasi DateTime creato senza un fuso orario esplicito utilizzi quello corretto:
<?php
date_default_timezone_set('America/New_York');
echo date_default_timezone_get(); // America/New_YorkEsempio 2: Creare un DateTime con un fuso orario specifico
Passa l'oggetto restituito da timezone_open() come secondo argomento al costruttore di DateTime. 'now' viene quindi interpretato in quel fuso orario:
La P finale nel formato stampa l'offset UTC (ad esempio +02:00), così puoi verificare che il fuso orario sia stato applicato.
Esempio 3: Convertire tra fusi orari
Un DateTime memorizza sempre un istante assoluto. Chiamare setTimezone() non sposta l'istante — cambia solo come quell'istante viene visualizzato. Qui mezzogiorno a New York viene mostrato come l'equivalente orario a Parigi:
L'orologio avanza di sei ore perché Parigi è sei ore avanti rispetto a New York a gennaio.
Esempio 4: Gestire un identificatore non valido
Poiché timezone_open() restituisce false in caso di errore, controlla il risultato prima di usarlo — specialmente quando l'identificatore proviene dall'input dell'utente:
<?php
$tz = @timezone_open('Mars/Olympus_Mons');
if ($tz === false) {
echo 'Unknown timezone, falling back to UTC.';
$tz = timezone_open('UTC');
}
echo "\n", $tz->getName(); // UTCQuando usare timezone_open()
- Visualizzare un istante in più fusi orari — memorizza tutto in UTC, poi converti all'output con
setTimezone(). - Leggere l'offset o il nome del fuso orario di un
DateTimetramitetimezone_name_get()otimezone_offset_get(). - Codebase procedurali che preferiscono le chiamate
function()anewper uniformità.
Se scrivi PHP orientato agli oggetti, new DateTimeZone('Europe/Paris') è più leggibile e si comporta in modo identico.
Conclusione
timezone_open() costruisce un oggetto DateTimeZone a partire da un identificatore affinché i valori DateTime vengano interpretati e visualizzati nel fuso orario corretto. I concetti chiave: è intercambiabile con new DateTimeZone(), restituisce false in caso di identificatore errato (quindi valida l'input), e setTimezone() cambia solo l'ora visualizzata, mai l'istante sottostante. Per una panoramica più ampia, consulta PHP Timezones e PHP Date and Time.