back to top

Date PHP: gestire date e orari

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.

Pubblicitร 
Massimiliano Bossi
Massimiliano Bossi
Stregato dalla rete sin dai tempi delle BBS e dei modem a 2.400 baud, ho avuto la fortuna di poter trasformare la mia passione in un lavoro (nonostante una Laurea in Giurisprudenza). Adoro scrivere codice e mi occupo quotidianamente di comunicazione, design e nuovi media digitali. Orgogliosamente "nerd" sono il fondatore di MRW.it (per il quale ho scritto centinaia di articoli) e di una nota Web-Agency (dove seguo in prima persona progetti digitali per numerosi clienti sia in Italia che all'estero).