W3docs

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|false

Parametro

  • $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 da timezone_identifiers_list().

Valore restituito

  • Un oggetto DateTimeZone in caso di successo.
  • false se l'identificatore non è riconosciuto (viene anche generato un Warning). 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_York

Esempio 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:

php— editable, runs on the server

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:

php— editable, runs on the server

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(); // UTC

Quando 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 DateTime tramite timezone_name_get() o timezone_offset_get().
  • Codebase procedurali che preferiscono le chiamate function() a new per 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.

Esercizio

Pratica
Cosa si può affermare sulla classe 'DateTimeZone' in PHP, come descritto nella pagina fornita?
Cosa si può affermare sulla classe 'DateTimeZone' in PHP, come descritto nella pagina fornita?
Was this page helpful?