W3docs

time()

Impara le funzioni PHP per data e ora: time(), date(), strtotime(), DateTimeImmutable, DateInterval e DateTimeZone con esempi pratici.

Introduzione

PHP fornisce un solido set di funzioni per data e ora, essenziali per la gestione dei dati temporali: registrazione di eventi, pianificazione, calcolo di durate e visualizzazione di date localizzate. Questa guida copre gli strumenti più comunemente usati — time(), date(), strtotime() e la moderna API orientata agli oggetti DateTimeImmutable / DateInterval / DateTimeZone — con la loro sintassi ed esempi pratici e funzionanti.

Alcuni concetti da conoscere prima:

  • Un timestamp Unix è un intero che conta i secondi dal 1° gennaio 1970 00:00:00 UTC (l'"epoch"). È indipendente dal fuso orario, il che lo rende ideale per memorizzare e confrontare momenti nel tempo.
  • Una stringa di formato trasforma un timestamp in una stringa leggibile dall'utente. Ogni carattere (Y, m, d, H, …) corrisponde a un componente della data.
  • PHP visualizza le date utilizzando il fuso orario predefinito del server. Impostalo esplicitamente per evitare sorprese:
<?php

date_default_timezone_set('UTC');

Impostare il fuso orario in anticipo rende date() e time() deterministici su tutti i server. Per un'introduzione più approfondita, consulta PHP Date and Time.

Funzione date() di PHP

La funzione date() formatta un timestamp in una stringa leggibile. Accetta due parametri: format (obbligatorio) e timestamp (opzionale, predefinito all'ora corrente). La stringa di formato usa caratteri specifici per rappresentare i componenti della data.

Esempio della funzione date() in PHP

php— editable, runs on the server

In questo esempio, Y, m e d rappresentano rispettivamente l'anno a quattro cifre, il mese a due cifre e il giorno a due cifre. La stringa di formato supporta molti altri caratteri per ore, minuti, secondi e altro ancora.

Caratteri di formato comuni

CarattereSignificatoEsempio
YAnno a 4 cifre2023
yAnno a 2 cifre23
mMese, con zero iniziale03
nMese, senza zero iniziale3
dGiorno del mese, con zero iniziale03
jGiorno del mese, senza zero iniziale3
HOra, formato 24h, con zero iniziale14
gOra, formato 12h, senza zero iniziale2
iMinuti09
sSecondi05
AAM/PMPM
lNome del giorno (completo)Friday
DNome del giorno (abbreviato)Fri
FNome del mese (completo)March
TAbbreviazione del fuso orarioUTC

Passa un secondo argomento per formattare qualsiasi timestamp, non solo "adesso":

<?php

date_default_timezone_set('UTC');

echo date("l, F j, Y", 1678838400); // outputs "Wednesday, March 15, 2023"

Per fare in modo che una lettera letterale non venga trattata come carattere di formato, anteponile un backslash (es. date('jS \o\f F')). Per ulteriori opzioni di formattazione consulta date() e date_format().

Funzione time() di PHP

La funzione time() restituisce il timestamp Unix corrente, che conta il numero di secondi dal 1° gennaio 1970, 00:00:00 UTC.

Come usare la funzione time() di PHP?

php— editable, runs on the server

L'intero restituito può essere passato direttamente a date() o ad altre funzioni temporali per ulteriori elaborazioni. Poiché il timestamp è semplicemente un numero, puoi eseguire operazioni aritmetiche su di esso — ad esempio, aggiungere 86400 (il numero di secondi in un giorno) per ottenere "questa stessa ora domani":

<?php

date_default_timezone_set('UTC');

$tomorrow = time() + 86400; // 24 * 60 * 60 seconds
echo date("Y-m-d H:i:s", $tomorrow);

Per operazioni aritmetiche sulle date che rispettino mesi, anni bisestili e ora legale, preferisci l'API orientata agli oggetti mostrata di seguito rispetto all'aritmetica sui secondi grezzi.

Funzione strtotime() di PHP

La funzione strtotime() analizza una descrizione testuale in inglese di data e ora e la converte in un timestamp Unix. Accetta un singolo argomento stringa.

Esempio della funzione strtotime() di PHP

php— editable, runs on the server

Questo converte la stringa di data e ora specificata nel corrispondente valore di timestamp Unix. strtotime() comprende anche espressioni relative, utili per la pianificazione:

<?php

date_default_timezone_set('UTC');

echo date("Y-m-d", strtotime("next monday")), "\n";
echo date("Y-m-d", strtotime("2023-03-03 +1 week")); // outputs "2023-03-10"

Se la stringa non può essere analizzata, strtotime() restituisce false, quindi verifica sempre il risultato prima di utilizzarlo.

Classe DateInterval di PHP

La classe DateInterval rappresenta una durata tra due date o orari. Lo sviluppo PHP moderno utilizza tipicamente DateTimeImmutable per calcolare gli intervalli, poiché evita di mutare l'oggetto data originale.

Esempio della classe DateInterval di PHP

php— editable, runs on the server

Questo calcola la differenza tra due date. Il specificatore di formato %R%a restituisce il segno (+ o -) seguito dal numero totale di giorni.

Puoi anche costruire un DateInterval direttamente da una stringa di durata ISO 8601 e aggiungerlo o sottrarlo da una data. P1W significa "un periodo di una settimana":

<?php

$start = new DateTimeImmutable('2023-03-03');
$later = $start->add(new DateInterval('P1W'));
echo $later->format('Y-m-d'); // outputs "2023-03-10"

Poiché DateTimeImmutable non muta mai l'originale, $start punterà ancora al 3 marzo dopo la chiamata add(). Consulta date_add(), date_sub() e date_diff() per gli equivalenti procedurali.

Funzioni PHP per i fusi orari

PHP gestisce i fusi orari attraverso la classe DateTimeZone e i relativi metodi. Questi consentono la conversione tra zone e la visualizzazione degli offset UTC.

Esempio di funzioni PHP per i fusi orari

php— editable, runs on the server

Questo visualizza la data e l'ora nella zona specificata, insieme alla sua abbreviazione (es. EST).

Per convertire un momento esistente da una zona a un'altra, usa setTimezone(). L'istante nel tempo rimane lo stesso — cambia solo la sua rappresentazione:

<?php

$ny = new DateTimeImmutable('2023-03-03 12:00:00', new DateTimeZone('America/New_York'));
$utc = $ny->setTimezone(new DateTimeZone('UTC'));
echo $utc->format('Y-m-d H:i:s T'); // outputs "2023-03-03 17:00:00 UTC"

New York è cinque ore indietro rispetto a UTC a marzo, quindi mezzogiorno a New York corrisponde alle 17:00 UTC. Per cambiare il fuso orario usato dalle funzioni procedurali date() e time(), chiama date_default_timezone_set().

API procedurale vs. orientata agli oggetti: quale usare

PHP offre due stili per lavorare con le date:

  • Funzioni procedurali (time(), date(), strtotime(), getdate(), gmdate()) sono concise e ottime per formattazioni rapide o conversioni una tantum.
  • L'API orientata agli oggetti (DateTimeImmutable, DateInterval, DateTimeZone) è la scelta consigliata per tutto ciò che riguarda fusi orari, durate o calcoli su date, perché è esplicita, immutabile ed evita le insidie dell'aritmetica in secondi interi attraverso i confini dell'ora legale.

Una buona regola pratica: usa DateTimeImmutable ogni volta che una data attraversa un fuso orario o deve essere sommata o sottratta.

Conclusione

Padroneggiare le funzioni PHP per data e ora consente agli sviluppatori di gestire i dati temporali con precisione in ambienti e fusi orari diversi. Inizia con time() e date() per i casi semplici, utilizza strtotime() per analizzare l'input dell'utente e affidati alla famiglia DateTimeImmutable per operazioni aritmetiche affidabili sulle date.

Esercitazione

Pratica
Quali sono le funzionalità della funzione 'date()' in PHP?
Quali sono le funzionalità della funzione 'date()' in PHP?
Was this page helpful?