Date e orari con Php
Scritto da Erriko in Php il 11 maggio 2009
La restituzione della data e dell’ora può sembrare una funzione banale, eppure saper gestire questo aspetto in php è davvero utilissimo nei casi più disparati.
Nella manipolazione delle date in php è fondamentale il concetto di timestamp: ovvero il numero dei secondi trascorsi dal 1 gennaio 1970.
Una “piccola” (si fa per dire) curiosità: allo stato attuale il timestamp è concepito come un numero a 10 cifre. Questa lunghezza risulta essere sufficiente a contare i secondi trascorsi tra l’1/1/1970 ed il il 19/1/2038.
Per questo motivo si prevede una sorta di Millennium bug, quando nel 2038 le macchine che utilizzano il timestamp “classico” termineranno il suddetto intervallo e torneranno al 1970
. Questa è una delle ragioni per le quali si sta via via passando a sistemi con architetture 64 bit che permettono una lunghezza superiore e quindi rinviano il problema. Per ulteriori informazioni a riguardo potete leggere questa pagina di wikipedia, oppure potremo decidere di riparlarne insieme in un articolo ad-hoc, basta chiedere
!
Ma torniamo a noi:
Visualizzare il timestamp
Visualizzare la data (o meglio il timestamp) è semplicissimo: basta inserire nel codice php le seguenti righe:
<?php time(); ?>
In questo modo verrà visualizzato, come accennato prima, un numero composto a 10 cifre e, almeno ai comuni mortali, del tutto incomprensibile.
Visualizzare la data in maniera corretta
Utilizzando invece il codice
<?php
echo date ("d-m-Y H:i:s");
?>
sarà possibile stampare a schermo il formato, molto più usabile, giorno-mese-anno ore:minuti:secondi.
Il risultato sarà, ad esempio: 07-09-2010 13:00:28
E’ possibile inoltre scegliere il formato dei singoli componenti che costituiscono data e ora sostituendo all’interno della funzione date() le lettere mensionate nell’esempio con altre, facendo riferimento alla guida ufficiale della funzione date presente in questa pagina.
Modificando il codice precedente in seguendo i caratteri indicati nella guida ufficiale si può ottenere, ad esempio: Tuesday September 2010 1:00 pm
Per ottenere risultati più complessi possiamo combinare la funzione mktime() e la funzione date().
date() visualizza la data di oggi, mktime() estrapola il timestamp del valore ricavato e consente di effettuare calcoli, riconvertendo poi il timestamp in formato leggibile con date().
Ecco alcuni esempi:
<?php
// ieri
echo date ("d-m-Y",mktime(0,0,0,date("m"),date("d")-1,date("Y")));
// il mese prossimo
echo date ("d-m-Y",mktime(0,0,0,date("m")+1,date("d"),date("Y")));
// tra centoventi giorni
echo date ("d-m-Y", mktime(0,0,0,date("m"),date("d")+120,date("Y")));
// tra 6 ore
echo date ("d-m-Y H:i:s", mktime(date("H")+6,date("i, s, m, d, Y")));
// fra un anno
echo date ("d-m-Y H:i:s", mktime(date("H"),date("Y")+1));
?>
Possiamo inoltre utilizzare checkdate(), per verificare se una determinata data esiste, ed in questo caso il codice sarà:
<?php // controlliamo se esiste il 32/9/08 // il risultato sarà bool(false) var_dump(checkdate(9,32,2008)); ?>
Ottenere la data in italiano
Si noti che in tutti i casi trattati fin ora la visualizzazione della data avviene in lingua inglese. Per ovviare a questo inconveniente è possibile risolvere nei seguenti modi:
Se il codice è eseguito da un server Linux:
<?php
setlocale(LC_TIME, 'it_IT');
echo strftime("%A %d %B %Y");
?>
Se il codice è eseguito da un server Windows:
<?php
setlocale(LC_TIME, 'ita');
echo strftime("%A %d %B %Y");
?>
Un ulteriore modo più “grezzo” potrebbe essere quello di creare appositi array in modo da tradurre semplicemente i nomi dall’inglese all’italiano, come in questo esempio:
<?php
// carico tutti i nomi dei mesi nell'array $mese
$mese = array ("Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre");
// carico tutti i giorni della settimana nell'array $giorno
$giorno = array ("Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì","Sabato");
// qui stampo il giorno della settimana
// date("w") restituisce un valore da 0 a 6 dove 0 è domenica, 1 lunedì e cosi' via fino a sabato
echo "Il giorno della settimana è: {$giorno[date("w")]}";
// qui stampo il nome del mese
// date("n") restituisce un valore da 1 a 12
// qui ho dovuto togliere 1 a ("n") per stampare il mese corretto
// dal momento che l'indice dell'array parte da 0 e non da 1
echo "Siamo nel mese di: {$mese[(date("n")-1)]}";
echo "
";
// qui stampo la data in italiano
echo "Oggi è ".$giorno[date("w")]." ".date("d")." ".$mese[(date("n")-1)]." ".date("Y");
echo "
";
// questo è uguale alla riga sopra, solo che l'ho disposta su più righe con commenti per spiegartela
echo "Oggi è ".
$giorno[date("w")]." ". // giorno della settimana -> Martedì
date("d")." ". // numero del giorno -> 02
$mese[(date("n")-1)]." ". // mese dell'anno -> Dicembre
date("Y"); // anno 4 cifre -> 2009
?>




Non ci sono ancora commenti... Perchè non essere il primo?!?