W3docs

date()

Le funzioni di data e ora sono fondamentali in PHP. In questo articolo esploriamo le principali funzioni PHP per date e orari.

Introduzione

Quasi ogni applicazione deve prima o poi visualizzare, memorizzare o confrontare una data: una riga "pubblicato il", un conto alla rovescia, un controllo di scadenza. Questo capitolo spiega come funzionano gli strumenti PHP per data e ora e quando usare ciascuno. Iniziamo con le funzioni di uso quotidiano — date(), time() e strtotime() — poi passiamo alla manipolazione e al confronto delle date, e concludiamo con i punti che creano più confusione: i fusi orari e l'ora legale.

Lavorare con le Date in PHP

PHP offre due set di strumenti complementari per le date:

  • Funzioni proceduralidate(), time(), mktime() e strtotime() — che lavorano con un timestamp Unix (un semplice intero: il numero di secondi trascorsi dal 1° gennaio 1970 UTC). Sono veloci per la formattazione semplice e l'aritmetica di base.
  • L'API orientata agli oggetti DateTime — le classi DateTime, DateInterval e DateTimeZone — più leggibile per tutto ciò che riguarda intervalli, confronti o fusi orari, ed è l'approccio consigliato per il nuovo codice.

Questo capitolo utilizza entrambi gli stili in modo che tu possa riconoscerli nei progetti reali.

La Funzione date()

La funzione date() trasforma un timestamp in una stringa formattata. Accetta una stringa di formato come primo parametro e un timestamp opzionale come secondo; quando il timestamp è omesso, date() usa l'ora corrente.

php— editable, runs on the server

Questo produce la data corrente nel formato "Mese Giorno, Anno", come March 3, 2023.

Ogni lettera nella stringa di formato è un segnaposto. La tabella seguente elenca i caratteri più utilizzati:

CarattereSignificatoEsempio
YAnno a 4 cifre2023
yAnno a 2 cifre23
mMese, 2 cifre (01–12)03
nMese, senza zero iniziale3
FNome completo del meseMarch
MNome abbreviato del meseMar
dGiorno del mese, 2 cifre03
jGiorno del mese, senza zero iniziale3
lNome completo del giorno della settimanaFriday
HOra, formato 24 ore, 2 cifre14
hOra, formato 12 ore, 2 cifre02
iMinuti, 2 cifre09
sSecondi, 2 cifre05
AAM / PMPM

Qualsiasi carattere non riconosciuto come segnaposto viene stampato letteralmente, quindi date("Y-m-d H:i:s") produce un valore come 2023-03-03 14:09:05. Per stampare una lettera letterale che altrimenti sarebbe un segnaposto, aggiungile una barra rovesciata: date('l \t\h\e jS'). Per l'elenco completo dei segnaposto, consulta il capitolo date-format().

La Funzione time()

La funzione time() restituisce il timestamp Unix corrente — il numero di secondi trascorsi dal 1° gennaio 1970 UTC. Non accetta argomenti ed è il punto di partenza abituale per l'aritmetica delle date, perché gli interi sono facili da sommare e confrontare.

php— editable, runs on the server

Questo produce il timestamp Unix corrente, un intero lungo come 1646369616. Combinala con date() per formattare "adesso": date("Y-m-d", time()). Consulta il capitolo time() per maggiori dettagli.

La Funzione strtotime()

La funzione strtotime() analizza una data testuale in inglese — "March 3, 2023", "next Monday", "+2 weeks" — e restituisce il timestamp Unix corrispondente. È notevolmente flessibile, il che la rende comoda per convertire input umani in un timestamp da formattare o confrontare.

php— editable, runs on the server

Questo produce il timestamp Unix per il 3 marzo 2023: 1677801600.

Attenzione: se strtotime() non riesce ad analizzare la stringa, restituisce false, non un errore. Controlla sempre il risultato prima di usarlo — if (($ts = strtotime($input)) === false) { /* data non valida */ } — altrimenti false viene silenziosamente convertito a 0, che viene formattato come 1° gennaio 1970. Consulta il capitolo strtotime() per la grammatica completa che accetta.

Manipolazione delle Date in PHP

Oltre alla formattazione delle date, PHP offre una varietà di funzioni per manipolarle. Queste funzioni ti permettono di aggiungere o sottrarre tempo da una data, confrontare date e altro ancora.

Aggiungere e Sottrarre Tempo con strtotime()

strtotime() fa molto più che analizzare date fisse — comprende anche le espressioni relative. Passa un timestamp di base come secondo argomento e una frase come "+1 day", "-3 weeks" o "first day of next month" come primo, e otterrai un nuovo timestamp.

php— editable, runs on the server

Questo produrrà la data di un giorno dopo il 3 marzo 2023, ovvero "March 4, 2023".

I Metodi DateTime::add() e DateTime::sub()

I metodi orientati agli oggetti DateTime::add() e DateTime::sub() aggiungono o sottraggono un DateInterval da un oggetto DateTime. Un DateInterval viene costruito da una stringa di durata ISO 8601: P1D significa "un periodo di 1 giorno", P2W è due settimane e PT1H30M è un'ora e trenta minuti (la T separa la parte della data da quella dell'ora).

Questo stile è preferito per il nuovo codice perché l'operazione si legge come una frase e l'oggetto tiene traccia del proprio fuso orario.

php— editable, runs on the server

Questo produce la data di un giorno dopo il 3 marzo 2023: March 4, 2023. I capitoli dedicati date-add() e date-sub() approfondiscono l'argomento, mentre date-diff() mostra come ottenere l'intervallo tra due oggetti DateTime.

Confronto di Date in PHP

Poiché i timestamp sono semplici interi, puoi confrontare due date con i normali operatori <, > e == una volta che entrambi i valori sono timestamp. Converti prima ogni stringa di data con strtotime().

php— editable, runs on the server

Questo produce Date 1 is earlier than Date 2. Per confrontare oggetti DateTime puoi usare gli stessi operatori direttamente ($a < $b) senza convertire in timestamp.

Fusi Orari e Ora Legale

La parte più delicata del lavoro con le date è assicurarsi che facciano riferimento allo stesso momento in diverse regioni. date() e time() interpretano i timestamp nel fuso orario predefinito configurato in PHP, quindi impostarlo correttamente è importante.

La Funzione date_default_timezone_set()

date_default_timezone_set() imposta il fuso orario predefinito utilizzato da tutte le funzioni di data e ora per il resto della richiesta. Chiamala una volta, all'inizio dello script, passando un identificatore IANA valido come America/New_York o Europe/London.

<?php
    date_default_timezone_set("America/New_York");
    echo date("Y-m-d H:i:s");
?>

Un elenco di identificatori validi si trova nel capitolo php-timezones; la lettura dell'impostazione corrente è descritta in date-default-timezone-get().

La Classe DateTimeZone

Quando hai bisogno di fusi orari diversi nello stesso script — ad esempio, per mostrare l'ora di un evento a utenti di diverse regioni — impostare il fuso orario predefinito una sola volta non è sufficiente. La classe DateTimeZone permette a uno specifico oggetto DateTime di portare con sé il proprio fuso orario:

<?php
    $timezone = new DateTimeZone("America/New_York");
    $date = new DateTime("2023-03-03 09:00", $timezone);
    echo $date->format("Y-m-d H:i T");
?>

Questo formatta la data nell'ora di New York e stampa l'abbreviazione del fuso orario (T), ad esempio 2023-03-03 09:00 EST.

Lavorare con l'Ora Legale

L'ora legale (DST) sposta l'orologio in avanti o indietro, quindi l'offset per un fuso orario come America/New_York non è fisso (EST vs EDT). PHP gestisce il cambio automaticamente a patto che si utilizzi un nome di zona anziché un offset codificato a mano. Il carattere di formato I (i maiuscola) di date() indica se l'ora legale è attualmente in vigore: 1 se lo è, 0 se non lo è.

php— editable, runs on the server

Questo indica se l'ora legale è in vigore o meno per il fuso orario predefinito corrente.

Conclusione

Ora hai il kit di strumenti essenziale per le date in PHP: date() per la formattazione, time() e strtotime() per ottenere e analizzare i timestamp, la famiglia DateTime per aggiungere, sottrarre e confrontare, e DateTimeZone per gestire regioni diverse. Come regola generale, usa le funzioni procedurali per una formattazione rapida e occasionale, e l'API orientata agli oggetti DateTime per tutto ciò che riguarda intervalli, confronti o più fusi orari. Per una panoramica più ampia consulta PHP Date and Time.

Pratica

Pratica
Quali sono i formati validi che possono essere usati dalla funzione date() in PHP?
Quali sono i formati validi che possono essere usati dalla funzione date() in PHP?
Was this page helpful?