gestire e manipolare le date

Oggi parleremo di date con php. L’importanza delle date non è soltanto per visualizzarle sul browser ma anche e soprattutto per eseguire calcoli sul tempo, come ad esempio in un form dove bisogna verificare la data, oppure in un applicazione che invia una mail dopo un certoperiodo di tempo, oppure di un semplice calendario e tanti altri casi che si presentano quando si lavora con le date. Il concetto fondamentale su cui si basa php è il timestamp, che corrisponde al numero di secondi intercorsi  dal 1 gennaio del 1970, data in cui iniziò la unix epoch, praticamente l’anno zero dei computer.L’intervallo di valori va’ tipicamente dal13 dicembre 1901 20:45:54 al 19 gennaio 2038 03:14:07 che corrispondono al minimo e massimo valore rappresentabili mediante un numero intero a 32 bit con segno

Questo discorso vale per i sistemi Unix mentre chi usa Windows si troverà limitato( tanto per cambiare) ai soli valori positivi ovvero l’intervallo in cui può operare sarà quello compreso tra 1 gennaio 1970 e 19 gennaio 2038.
Le funzioni principali di php per manipolare le date sono principalmente 4 :

 time()
mktime()
date()
getdate()

la funzione time è la forma più semplice di presentare un timestamp Unix.
Scriviamo

 <?php echo time(); ?>

Ecco il risultato del timestamp.

La funzione mktime invece serve per ottenere il valore timestamp relativo a una determinata datan prevede 7 argomenti che in ordine sono :

    ore
    minuti
    secondi
    mese
    giorno
    anno

e l’ultimo valore specifica se usare l’ora legale oppure DST Daylight Saving Time, ma possiamo tralasciare facendo fare a php la scelta.
Ora mettiamo il caso che io voglia conoscere la mia data di nascita  24 settembre 1977, mettiamo 11:40 come ora ( questo non posso certo ricordarmelo icon razz gestire e manipolare le date )
scriverò questo codice :

 <?php
//stampo la mia data di nascita
echo mktime(11,40,0,9,24,1977) ;
?>

il risultato sarà 243945600 cioè il timestamp del 24 settembre 1977 alle ore 11: 40.

Com mktime possiamo anche calcolare intervalli di date come in questo esempio :

<?php
//timestamp attuale
echo mktime() ;
// la data attuale
$anno = 2007
$mese = 9
$giorno = 27
// ora creo il timestamp dell'ultimo giorno del mese
echo mktime(0,0,0,$mese,$giorno+3,$anno) ;
?>

Con queste due funzioni possiamo manipolare le date con il timestamp pero non è certo il modo di presentarle su un sito web
adesso bisognerà formattarle e renderli leggibili per la presentazione sul web.
In questo caso ci aiuta la funzione date() che permette,appunto, di formattare untimestamp secondo le nostre esigenze.
Vi consiglio di leggervi la documentazione ufficiale visto i diversi argomenti e parametri che accetta, vi elenco i più usati :
carattere    significato
d            giorno del mese numerico 01-31
D             giorno della settimana in abbreviazione di 3 caratteri
m             mese numerico 01-12
M             mese in abbreviazione di 3 caratteri
F                  mese in parola
Y            anno a quattro cifre
y            anno a due cifre
H              ore 00-24
h             ore 00-12
i               minuti
s                secondi

Passiamo subito a qualche esempio:

<?php
//stampiamo la data di oggi
echo date("d - m - y - H:i:s");
?>

possiamo anche spcificare un altra data, naturalmente, utilizzando la funzione mktime per indicare il timestamp, se omesso, come nell’esmpio sopra viene stampata la data corrente.
Esempio con il timestamp :

<?php
echo ("data di ieri : <br />");
//stampiamo la data di ieri
echo date("d - m - y - H:i:s") mktime(11,3,0,9,26,2007));
?>

Stamperà la data di ieri alle 11:03.

Potete cimentarvi con le varie combinazioni per vedere in pratica le diferenze, bastera solo cambiare i parametri al codice sopracitato.
Altra funzione importante è getdate() che in pratica riceve come argomento untimestamp e restituisce un array associativo con una serie di informazioni.
Esempio :

<?php //prima creiamo l'array e lo stampiamo
$oggi = getdate();
print_r($oggi);
?>

IL risultato sarà :
Array (
[seconds] => 8
[minutes] => 15
[hours] => 11
[mday] => 27
[wday] => 4
[mon] => 9
[year] => 2007
[yday] => 269
[weekday] => Thursday
[month] => September
[0] => 1190884508 )

cioè il timestamp di questo momento,questo perchè se omettiamo il timestamp verrà utilizzato quello attuale altrimenti avremmo potuto inserirlo come argomento, ad esempio una data precedente.
Possiamo ad esempio stampare una data utilizzando solo alcuni argomenti come nell’esempio:

<?php
// stampa Saturday, 19 March
$oggi = getdate();
echo "{$oggi['weekday']}, {$oggi['mday']} {$oggi['month']}";
?> 

Ora vediamo velocemente altre funzioni utili per le date.
Funzione chedate(), utilissima nei form serve per validare una data e restituisce un valore booleano true o false.
Riceve tre argomenti interi rispettivamente mese, giorno e anno e restituisce true o false a seconda che la data sia corretta o meno.
esempio :

<?php
// controlliamo se febbraio 2007 è
// bisestile il risultato sarà bool(false)
var_dump(checkdate(29,2,2007));
?>

Il risultato sarà bool (false).
Altra funzione utile è :
strtotime()
funzione che cerca di convertire nel corrispondente timestamp una stringa contenente un’espressione inglese indicante una data.
Esempio :

<?php
// stampa data attuale
echo ("data di oggi :");
$tmsp = strtotime("now");
echo date('d m Y',$tmsp);
echo(" <br />");
echo("data di domenica domenica :");
// stampa la prossima domenica
$tmsp = strtotime("next Sunday");
echo date('d m Y',$tmsp);
?>

Comodo no?
icon smile gestire e manipolare le date
Ora che sappiamo come manipolarle abbiamo un piccolo problemino, le date sono in inglesementre a noi servono in Italiano.
Bisogna agire sulle impostazioni locali del linguaggio impostando come lingua predefinita l’italiano,
vediamo come fare:
Inanzitutto dobbiamo usare la funzione strftime() che riceve come primo argomento una stringa che indica il tipo di formattazione e come secondo argomento il timestamp.
Le impostazioni locali del linguaggio vengono settate con setlocale().
esempio :

<?php
//settiamo italiano come lingua
setlocale( LC_TIME,"it_IT");
//stampiamo giorno e mese
echo strftime('%A $e %B');
?>

Cosi possiamo utilizzare le date in Italiano.
Ache questa funzione accetta diversi parametri vediamo i più usati e comuni :

%a    abbreviazione del giorno della settimana
%A    nome completo del giorno della settimana
%b    abbreviazione del nome del mese
%B    nome del mese completo

Bene abbiamo visto come possiamo manipolare date e come formattarle, alla prossima parleremo delle espressioni.

Indice della guida