Corso PHP/ Lezione 10: le date

La gestione delle date non è sempre così banale come sembra. Vediamo dunque come lavorare con le date in PHP attraverso brevi ma efficaci esempi
La gestione delle date non è sempre così banale come sembra. Vediamo dunque come lavorare con le date in PHP attraverso brevi ma efficaci esempi


Lavorare con date ed orari è un’operazione non banale, considerata la
particolare struttura dati con cui si ha a che fare. In molte applicazioni,
tuttavia, si ha necessità di manipolare date, confrontarle, validarle e così
via. In questa lezione vedremo in che modo possiamo operare su date ed orari nei
nostri script PHP, ricorrendo ad esempi concreti.

Nel linguaggio PHP le date vengono rappresentate sotto forma di "timestamp":
un timestamp è semplicemente un numero intero che corrisponde al numero di
secondi trascorsi dalla cosiddetta "Unix epoch" (le ore 0:00:00 del
primo gennaio 1970). Ad esempio, le ore 0:00:00 del primo gennaio 2001
corrispondono al timestamp 978303600.

Per conoscere il timestamp corrispondente ad una certa data basta invocare la
funzione mktime() passandole i parametri previsti e cioè, nell’ordine,
ore, minuti, secondi, mese, giorno, anno. Un ulteriore argomento, opzionale,
consente di tener conto dell’ora legale. Vediamo quale istruzione abbiamo
utilizzato per determinare il timestamp mostrato in precedenza.

// Timestamp delle ore 0:00:00 del primo gennaio
2001

echo mktime(0, 0, 0, 1, 1, 2001);

I timestamp, naturalmente, sono poco comprensibili per un essere umano, per
cui vediamo subito in che modo si possano tradurre in una forma "human
readable". PHP ci mette a disposizione, a questo scopo, la funzione date() .
Gli argomenti di date() sono due: il primo, obbligatorio, è una stringa
che rappresenta il formato in cui codificare la data; il secondo, facoltativo,
è il timestamp da formattare. Se quest’ultimo viene omesso, verrà considerato
il timestamp corrente. Vediamo un esempio.

// Questa istruzione stampa la data corrente nel
formato gg/mm/aaaa

echo "Data di oggi " . date("d/m/Y");

Nell’esempio mostrato, la stringa che esprime il formato in cui visualizzare
la data è "d/m/Y". Ognuna delle lettere che vi compaiono corrisponde
ad un elemento della data; nel nostro caso al giorno del mese (01-31), al mese
(01-12) ed all’anno, espresso con quattro cifre. Si consulti la pagina del
manuale PHP relativa alla funzione date() per un elenco completo delle
lettere utilizzabili. Nel frattempo, divertiamoci con altri esempi.

// Come sopra ma senza lo zero prima di giorni
e/o mesi di una sola cifra

echo "Data di oggi " . date("j/n/Y");

L’esempio seguente stampa il numero di giorni trascorsi dall’inizio
dell’anno.

echo "Sono trascorsi
".date("z")." giorni dall’inizio dell’anno.";

Riprendiamo l’esempio della data corrente; come possiamo visualizzarla in
modo testuale? Ecco una possibile soluzione.

// Nomi dei giorni della settimana

$giorni = array( "Dom", "Lun", "Mar", "Mer",
"Gio", "Ven", "Sab" );

echo "Oggi e': " . $giorni[date("w")];

In modo del tutto analogo si può ottenere il nome dei mesi. Per evitare di
chiamare ripetutamente la funzione date() se ne può utilizzare un’altra,
getdate() , che restituisce le informazioni sulla data ed ora correnti in
un array associativo.


Fino ad ora abbiamo considerato operazioni estremamente semplici sulle date;
nel seguito mostriamo, invece, come eseguirne altre più evolute. In primo
luogo, vediamo come sia possibile validare una data, cioè accertarsi che si
tratti di una data valida. Per citare qualche esempio sono date non valide il 31
aprile o il 29 febbraio di un anno non bisestile. La funzione preposta alla
verifica di una data è checkdate() .

// Verifichiamo una data (31 aprile 2001!?)

$giorno = 31;

$mese = 4;

$anno = 2001;

echo "La data $giorno/$mese/$anno ";

if (checkdate($mese,$giorno,$anno)) echo "è corretta.";

else echo "non è valida!";

Supponiamo adesso di voler confrontare due date per verificare se la prima è
antecedente alla seconda. In PHP un modo rapido per risolvere il problema è
quello di convertire entrambe le date nei corrispondenti timestamp e confrontare
quelli.

// Data n° 1: ancora il primo gennaio 2001

$data1 = mktime(0, 0, 0, 1, 1, 2001, 0);

// Data n° 2: il 29 luglio 2001

$data2 = mktime(0, 0, 0, 7, 29, 2001, 0);

echo "La prima data è ";

if ($data1 < $data2) echo
"precedente";

else echo "successiva";

echo " alla seconda.";

Altrettanto semplicemente si può calcolare il numero di giorni che separa due
date arbitrarie, come mostrato nell’esempio seguente:

// Data n° 1: ancora il primo gennaio 2001

$data1 = mktime(0, 0, 0, 1, 1, 2001, 0);

// Data n° 2: il 29 luglio 2001

$data2 = mktime(0, 0, 0, 7, 29, 2001, 0);

echo "Tra le due date ci sono ";

echo ($data2 - $data1)/(60*60*24);

echo " giorni.";



La differenza tra i due timestamp, espressa in secondi, può essere convertita
in giorni dividendo per 24 ore al giorno, 60 minuti l’ora, 60 secondi al minuto.
L’unica particolarità riguarda l’ultimo parametro fornito a mktime()
impostato a zero, in modo da ignorare l’ora legale.

A questo punto non mi resta che augurarvi buon divertimento con le date e
darvi appuntamento alla prossima lezione.

Luca Balzerani , studente di
Informatica, è fondatore e presidente di LatoServer.it ,
sito dedicato alla programmazione server-side ed al backend in generale.

Link copiato negli appunti

Ti potrebbe interessare

13 01 2001
Link copiato negli appunti