Questa semplicissima funzione PHP vi permette di convertire una data nel formato “mm/dd/aaaa hh:mm:ss” nel formato italiano “dd/mm/aaaa hh:mm:ss” e di scegliere se visualizzare solo la data oppure la data e l’ora.
Per quanto sia semplice e banale, la funzione vi risulterà molto utile quando dovrete visualizzare una data sul vostro sito web nel formato italiano ma che invece è salvata (per esempio) su un database MySql nel formato inglese.
Vediamo quindi la funzione:
function convertiDataEngToIta($data, $cosaVedere=null){ $primo = explode(" ",$data); $data0 = explode("-", $primo[0]); $dataOk = $data0[2]."/".$data0[1]."/".$data0[0]; if($cosaVedere == "dataOra"){ return $dataOk . " " . $primo[1]; } else { return $dataOk; } }
Analizziamo adesso la funzione:
Per prima cosa diamo uno sguardo ai parametri che passo alla funzione “convertiDataEngToIta” (ricordate sempre di dare dei nomi significativi alle vostre funzioni, classi, variabili etc etc.)
$data è chiaramente la data nel formato inglese
$cosaVedere invece (che può essere anche null) determinerà se voglio vedere solo la data (intesa appunto come dd/mm/aaaa) opppure la data e l’ora (intesa come dd/mm/aaaa HH:mm:ss).
Presupponendo che il divisore dei giorni (nel formato inglese, quindi alla partenza) sia la classica barra “/”, vediamo lo svolgimento della funzione: come prima cosa eseguo il comando di explode sul carattere spazio ” ” per separare giorno, mese ed anno da ora minuti e secondi. Visto che il comando explode restituisce un array composto dagli elementi che sono andato a dividere, nella prima posizione del mio array troverò la data, e nel secondo l’ora. Ricordiamoci sempre che il primo valore dell’array ha indice 0 (zero).
A questo punto eseguo un altro comando di explode sul primo elemento del mio array appena ottenuto. Nel mio caso infatti nell’array $primo ho alla posizione del primo elemento $primo[0] la sola data nel formato inglese. L’explode lo eseguirò quindi sul carattere “/”. Il risultato di questo comando sarà perciò di nuovo un array composto dai seguenti elementi: [0] mese, [1] giorno, [2] anno.
Ne segue che, per ottenere la data nel formato che desidero (e cioè quello italiano dd/mm/aaaa) mi basterà riordinare gli elementi di quest’ultimo array nel seguente modo. Facendo riferimento al mio esempio, dove l’array contenente meso, giorno e anno si chiama $data0 otterrò:
$dataOk = $data0[2].”/”.$data0[1].”/”.$data0[0];
Per ultimo, stabiliamo se far restituire alla nostra funzione la sola data oppure la data e l’ora. Il comando if controlla appunto cosa viene passato al parametro $cosaVedere. Se questo valore è esatto a “dataOra” verrà restituita la data e l’ora. Diversamente solo la data correttamente convertita.
Una precisazione: per mia comodità non faccio stampare alla funzione direttamente la data, bensì utilizzo il “return” per avere il valore e poi nel caso stamparlo con un “echo”.
Per utilizzare questa funzione si dovrà avere una cosa del genere:
$dataItaliana = convertiDataEngToIta("09/24/2013 08:30:52", "dataOra");
In questo caso, la funzione restituirà alla variabile “dataItaliana il seguente valore: 24/09/2013 08:30:52
Spero che questo articolo vi sia piaciuto e che sia stato di vostro gradimento ed utilizzo. Per qualsiasi domanda lasciate un commento o scrivetemi per email… anche se i commenti sono più graditi
È una buona soluzione ma non troppo funzionale quando hai la classe DateTime nativa di PHP
10 righe di funzione abbastanza statica possono essere rimpiazzati da
function convertiData($data_inglese){
$data = DateTime::createFromFormat(“m/d/Y H:i:s”, $data_inglese);
return $data->format(“d/m/Y”);
}
con l’enorme differenza di flessibilitá ed estensibilitá che puoi usare in questa funzione come ad esempio passare dinamicamente il formato per usarla in qualunque tipo di conversione tra date
Se vuoi dare un’occhiata alla mia classe su gitHub
https://github.com/matteo-hertel/MH_time
ci sono delle belle funzioni per manipolare le date!
Ciao Matteo e grazie mille per il tuo contributo.
Sicuramente “DateTime” nativo di PHP è molto più funzionale. Quello che mi premeva era fare un piccolo articolo veramente al livello base (non che DateTime non lo sia eh…)
Darò sicuramente un’occhiata alla tua libreria su GitHub! Anzi, qualora tu volessi ampliare il discorso date, potrei “recensire” la tua classe!
Grazie ancora a presto!
Jonathan