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
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
| Carattere | Significato | Esempio |
|---|---|---|
Y | Anno a 4 cifre | 2023 |
y | Anno a 2 cifre | 23 |
m | Mese, con zero iniziale | 03 |
n | Mese, senza zero iniziale | 3 |
d | Giorno del mese, con zero iniziale | 03 |
j | Giorno del mese, senza zero iniziale | 3 |
H | Ora, formato 24h, con zero iniziale | 14 |
g | Ora, formato 12h, senza zero iniziale | 2 |
i | Minuti | 09 |
s | Secondi | 05 |
A | AM/PM | PM |
l | Nome del giorno (completo) | Friday |
D | Nome del giorno (abbreviato) | Fri |
F | Nome del mese (completo) | March |
T | Abbreviazione del fuso orario | UTC |
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?
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
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
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
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.