In questa lezione della nostra guida passeremo in rassegna alcune funzioni per la gestione delle date in PHP concentrando la nostra attenzione, in particolare, sulla funzione date() al fine di capire come poterla usare nei nostri script PHP. Le funzioni per la manipolazione di date ed orari sono determinanti nello sviluppo di applicazioni e devono essere approfondite con la dovuta diligenza.
In questa lezione, quindi, non ci limiteremo a spiegare il funzionamento della funzione date() di PHP ma anche delle altre funzioni che consentono di gestire dati e orari.
Timestamp: cosโรจ?
Prima di passare in rassegna le principali funzioni PHP per la manipolazione di date e orari, tuttavia, รจ necessario fare una premessa ed introdurre il concetto di timestamp. Il timestamp รจ un valore numerico corrispondente al numero di secondi trascorsi da un preciso momento storico che prende il nome di epoch. Questo momento storico coincide con il 1 gennaio 1970 alle ore 00:00.
Questa caratteristica รจ tipica dei sistemi UNIX sui quali, appunto, PHP รจ nato ed ha preso vita.
Questo modo di gestire le date, diversamente da come puรฒ apparire a chi รจ alle prime armi, รจ molto efficente in quanto le date vengono trasformate in semplici numeri interi rendendo molto agevole ogni operazione di confronto o di aggiunta e sottrazione.
La funzione time()
La funzione time() di PHP consente di conoscere il valore attuale del timestamp. In poche parole, questa funzione restituisce il numero di secondi trascorso dal famoso 1 gennaio 1970.
echo time();
Il risultato sarร qualcosa del genere: 1064390400
La funzione mktime()
Questa funzione consente di risalire al timestamp partendo da una data arbitraria. La sintassi di mktime รจ la seguente:
mktime(ore, minuti, secondi, mese, giorno, anno);
Vediamo un esempio:
mktime(10, 0, 0, 9, 24, 2003);
Il risultato sarร : 1064390400
La funzione date()
Questa funzione, come lascia intendere il suo nome, consente di formattare una data ed un orario sulla base delle impostazioni del server sul quale girano i nostri script. Per prima cosa vediamo un semplicissimo esempio:
echo date("l");
Nellโeempio qui sopra la nostra funzione date() riceve un unico parametro ("l") che, come vedremo, corrisponde alla richiesta di mostrare il nome del giorno della settimana corrente.
Si noti che la funzione date() di PHP prevede due parametri: il primo (obbligatorio) รจ una stringa con il formato richiesto per lโoutput; il secondo (facoltativo) รจ il valore di timestamp che si desidera formattare (se omesso verrร preso in considerazione in timestamp attuale).
Vediamo un esempio completo:
echo date("d/m/Y", 1064390400);
// output: 24/09/2003
Vediamo ora i parametri attraverso i quali compilare la stringa per la formattazione dellโoutput:
- a โ fa comparire accanto allโora la dicitura "am" se lโora รจ compresa tra mezzanotte e mezzogiorno, fa invece comparire la dicitura "pm" se lโora รจ compresa tra mezzogiorno e mezzanotte. Per esempio 9:25 am per le nove e venticinque del mattino, 9:25 pm per le ventuno e venticinque di sera.
- A โ ha la stessa funzione del parametro precedente, ma fa comparire le lettere in maiuscolo anzichรจ in minuscolo. Per esempio 9:25 AM per le nove e venticinque del mattino, 9:25 PM per le ventuno e venticinque di sera.
- D โ indica le prime tre lettere del nome inglese del giorno della settimana. Per esempio Sun, Mon, Fri, Sat.
- l โ indica il nome inglese del giorno della settimana. Per esempio Sunday, Monday, Friday, Saturday.
- g โ indica lโora, in formato 12 ore (da usare magari con i parametri a e A), senza lโeventuale zero iniziale. Quindi assumerร un valore compreso tra 1 e 12.
- G โ indica lโora, in formato 24 ore, senza lโeventuale zero iniziale. Quindi assumerร un valore compreso tra 1 e 24.
- h โ indica lโora, in formato 12 ore, con lโeventuale zero iniziale. Quindi assumerร un valore compreso tra 01 e 12.
- H โ indica lโora, in formato 24 ore, con lโeventuale zero iniziale. Quindi assumerร un valore compreso tra 01 e 24.
- i โ indica i minuti, con lโeventuale zero iniziale. Quindi assumerร un valore compreso tra 00 e 59.
- I โ restituisce 1 se cโรจ lโora legale, 0 se cโรจ quella solare.
- j โ indica il giorno del mese, senza lโeventuale zero iniziale. Quindi assumerร un valore compreso tra 1 e 31.
- d โ indica il giorno del mese, con lโeventuale zero iniziale. Quindi assumerร un valore compreso tra 01 e 31.
- L โ restituisce 1 se lโanno รจ bisestile, 0 se non lo รจ.
- m โ indica il numero del mese con lโeventuale zero iniziale. Quindi assumerร un valore compreso tra 01 e 12.
- n โ indica il numero del mese senza lโeventuale zero iniziale. Quindi assumerร un valore compreso tra 1 e 12.
- M โ indica le prime tre lettere del nome inglese del mese in cui ci troviamo. Per esempio Jan, Mar, Aug, Nov.
- F โ indica il nome inglese per intero del mese in cui ci troviamo. Per esempio January, March, August, November.
- O โ indica la differenza dal meridiano di Greenwich. Per esempio +0200 per indicare due ore di ritardo, o -0400 per indicare quattro ore di anticipo.
- Z โ indica la differenza dal meridiano di Greenwich in secondi. Per esmpio +43200 o โ 43200.
- r โ restituisce la data formattata secondo la norma RFC 822. Per esempio Thu, 21 Dec 2000 16:01:07 +0200. (Disponibile a partire da PHP 4.0.4)
- s โ indica i secondi, con lโeventuale zero iniziale. Quindi assumerร un valore compreso tra 00 e 59.
- S โ indica il suffisso inglese per i numeri cardinali. Per esempio st, nd, rd, th.
- t โ indica il numero di giorni di un dato mese senza lo zero iniziale. Quindi assumerร un valore compreso tra 1 e 31.
- U โ indica il numero di secondi trascorsi dallโUnix Epoch, ovvero il 1 Gennaio 1970.
- w โ indica il numero del giorno della settimana senza lo zero iniziale. Bisogna tenere conto che la settimana inglese inizia la Domenica, e che in PHP gli elementi si contano a partire da 0. Quindi assumerร 0 per Domenica, 1 per Lunedรฌ e cosรฌ via fino a 6 per Sabato.
- W โ indica il numero della settimana in cui ci troviamo. Per questo parametro le settimane iniziano il Lunedรฌ, e non la Domenica.
- Y โ indica lโanno utilizzando quattro cifre. Per esempio 2003.
- y โ indica lโanno utilizzando le ultime due cifre. Per esempio 03.
- z โ indica il numero di giorno dellโanno senza lโeventuale zero iniziale. Quindi assumerร un valore compreso tra 1 e 366
Esempi di utilizzo di date() in PHP
Ora che conosciamo la teoria vediamo qualche esempio pratico di utilizzo della funzione date() di PHP.
Immaginiamo di voler ottenere una data del tipo 04/09/03, dovremmo scrivere una riga come questa:
date("d/m/y");
Per ottenere una data del tipo 4-9-2003 dovremmo utilizzare:
date("j-n-Y");
Per ottenere unโorario del tipo 15:54:06 dovremmo utilizzare:
date("H:i:s");
Per ottenere unโorario del tipo 3.54 pm dovremmo dovremmo utilizzare:
date("g.i a");
Passiamo adesso a vedere come ottenere delle date un poโ piรน comlesse. Nulla infatti ci vieta di ottenere un output di data/orario del tipo 23/9/2003 9:54.65 PM. La riga da scrivere sarร come questa:
date("d/n/Y g:i.s A");
Caratteri speciali e backslash
Una nota importante: nel primo parametro (cioรจ nella stringa di formattazione) possiamo usare, come avete visto, anche altri caratteri rispetto a quelli "speciali" elencati sopra. Eโ bene ricordare, perรฒ, che se scriviamo "a" al suo posto PHP inserirร la dicitura am/pmโฆ ma se non vogliamo che ciรฒ accada? se vogliamo che venga scritta la lettera "a" come possiamo fare? Sempliceโฆ basta farla precedere da un backslash. Provate ad esempio ad eseguire questo codice:
date('d/m/Y \a\l\l\e H:i:s');
Il risultato sarร : 04/09/2003 alle 15:54:06
La funzione checkdate()
Grazie alla funzione checkdate di PHP, come lascia intendere il nome, รจ possibile verificare se una data รจ corretta oppure no. La sua sintassi รจ la seguente:
checkdate(mese, giorno, anno);
la funzione restituisce true o false a seconda che la verifica sia andata o buon fine oppure no.
Vediamo un esempio pratico:
if (checkdate(11,31,2003)) {
echo 'La data รจ corretta';
}else{
echo 'La data รจ sbagliata';
}
Nel nostro esempio, ovviamente, il risultato sarร negativo in quanto il mese di novembre ha 30 giorni e non 31.