Succede molto di frequente di avere la necessità di lavorare con le date. In PHP questo genere di operazioni sono davvero molto semplici grazie alla funzioni a disposizione. Scopriamo insieme le principali.
Gestire il timestamp con la funzione time()
Il timestamp è un sistema di misurazione rappresentato da un intero che indica il numero di secondi a partire da una data definita Unix Epoch. In particolare indica il numero di secondi intercorsi dal 1 gennaio 1970 alle ore 00:00 al momento corrente.
Per recuperare con PHP il timestamp attuale è sufficiente utilizzare la funzione time()
.
echo time(); // restituirà un valore simile a 1468536917
Operazioni con le date
Ovviamente non è possibile recuperare solo il timestamp corrente ma anche il timestamp di qualsiasi data. In questo caso ci viene incontro la funzione strtotime()
. Essa prende in ingresso una stringa che contiene il riferimento temporale che si vuole convertire:
echo strtotime('2015-01-01'); // restituirà 1420066800
Questa funzione ci permette di passare anche valori molto vicini al linguaggio naturale e, di convertirli automaticamente:
echo strtotime("now"); // timestamp corrente
echo strtotime("10 September 2010"); // timestamp del 10 settembre 2010
echo strtotime("+1 day"); // timestamp del giorno successivo a quello corrente
echo strtotime("+1 week"); // timestamp della settimana successiva al giorno corrente
echo strtotime("+1 week 2 days 4 hours 2 seconds"); // timestamp di una settimana, due giorni, 4 ore e 2 secondi rispetto al timestamp corrente
echo strtotime("next Thursday"); // timestamp del prossimo giovedì
echo strtotime("last Monday"); // timestamp dell'ultimo lunedì
Formattare una data
Un'altra operazione piuttosto comune è quella di formattare una specifica data in un formato da noi definito. Ad esempio, supponiamo di dover stampare un timestamp nel formato "gg/mm/aaaa h:m:s", per questo scopo possiamo utilizzare la funzione date()
:
$timestamp = strtotime("+1 day");
echo date('d/m/Y H:i:s', $timestamp); // stamperà, ad esempio, 17/07/2016 14:30:14
La funzione date()
prende in ingresso due parametri:
$format
: il formato in cui vogliamo stampare la data;$timestamp
: il timestamp della data da stampare; se non viene passato questo valore verrà preso di default il timestamp corrente.
Il formato impiega dei caratteri standard riservati per formattare la data; nell'esempio precedente abbiamo utilizzato:
Carattere | Descrizione | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
d |
Indica il giorno con lo 0 iniziale (cioè con lo 0 anche per i giorni inferiori a 10). | m |
Indica il mese con lo 0 iniziale. | Y |
Indica l'anno nel formato a 4 cifre. | H |
Indica le ore con 0 iniziale. | i |
Indica i minuti con 0 iniziale. | s |
Indica i secondi con 0 iniziale. |
Vediamo insieme quali sono gli altri caratteri più diffusi oltre quelli appena descritti:
Carattere | Descrizione |
---|---|
D |
Per indicare i primi tre caratteri del giorno (es. Mon, Tue, Wed). |
j |
Equivalente di d ma senza lo 0 (es. 1, 2, 3). |
F |
Il nome del mese completo (es. January, February, ...). |
y |
Equivalente di Y ma con le ultime due cifre (es. 16). |
La lista completa dei caratteri per le date è disponibile sulla documentazione ufficiale di PHP.
Vediamo qualche altro esempio di utilizzo della funzione date()
:
echo date('Y-m-d H:i:s'); // stamperà 2016-07-16 che rappresenta il formato utilizzato per il DATETIME in MySQL
echo date('r'); // stamperà Sat, 16 Jul 2016 14:51:07 +0200
echo date('l, j F Y'); // stamperà Saturday, 16 July 2016
Abbiamo visto come, con la funzione date()
, possiamo rappresentare una data nel formato di cui necessitiamo. Vediamo ora come convertire una data da un formato, ad esempio quello anglosassone, nel nostro formato italiano. Il formato anglosassone è rappresentato come mese/giorno/anno
ed è anche il formato standard riconosciuto dalla funzione strtotime()
. Convertire quindi una data dal formato anglosassone a quello italiano è piuttosto semplice:
$englishDate = '12/15/2016'; // 15 dicembre 2016 nel formato mm/dd/yyyy
$timestamp = strtotime($englishDate); // conterrà 1481756400
echo date('d/m/Y', $timestamp); // stamperà 15/12/2016
echo date('l, j F Y', $timestamp); // stamperà Thursday, 15 December 2016