Questo post è servito più che altro a me come appunto di programmazione.
Infatti ogni volta che devo lavorare con le date in php + mysql mi dimentico come fare…

Ogni developer che crea siti dinamici infatti deve prima o poi fare i conti con le date e con la loro gestione.

In Mysql nei campi che sono DATETIME vengono salvate date in formato americano del tipo YYYY-mm-dd hh:mm:ss es 2012-05-31 21:14:36
Mentre quasi sempre noi europei necessitiamo del formato standar dd/mm/YYYY (es. 31/05/2012)

Ecco quindi che quando andiamo a salvare una data in mysql dobbiamo standarizzarla nel formato standard.
Ovviamente possiamo salvare sia una data sola e sia una data completa con orario.

Vediamo prima come formattare la data e salvarla nel db mysql.
Per farlo il metodo più semplice è di utilizzare direttamente la funzione di mysql date_format

 

Quindi ipotizzando che essa è contenuta nella nostra variabile $data_input

[php]
$data_input = "31/05/2012";
$query = "INSERT INTO table VALUES(‘" . STR_TO_DATE($data_input, ‘%d/%m/%Y’ )."’)";
[/php]

 

Abbiamo inserito nella tabella di esempio table il valore 2012-05-31 00:00:00.
Quindi per usare STR_TO_DATE si specifica la data con la nostra formattazione europea (o una variabile come nell’esempio) seguita dallo schema della sua struttura. Nel nostro esempio %d/%m/%Y.

Se volevamo inserire anche l’ora bastava solamente specificare anche H:i:s.

 

Ora vediamo come importare dal db mysql la data con formattazione standard e convertirla in quella che preferiamo.
Utilizzeremo anche in questo caso una funzione di mysql date_format.
Vediamo un esempio nello specifico:

[php]
$query = "SELECT DATE_FORMAT(campo_data, ‘%d/%m/%Y’)as data_formattata FROM table WHERE id = ‘$id’";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
echo $row[‘data_formattata’]; \\ stampa "31/05/2012"
[/php]

 

 

In alternativa possiamo utilizzare anche la funzione di php per la formattazione delle date date_format (manuale ufficiale)
Es.

[php]
$data = "2012-05-31 15:36:21";
$data = date_create($data); // creo l’oggeto data
echo date_format($date, ‘H:i:s d/m/Y’); // stampa 15:36:21 31/05/2012
[/php]

 

 

Queste due non sono le uniche due possibili soluzioni. Infatti si può anche modificare le date con php utilizzando la funzione explode.
Supponiamo di prelevare il dato dal db e di metterlo in una variabile temporanea.

[php]
// $data prelevato da db
// $data = "2012-05-31 15:36:21";
$temp1 = explode(" ", $data);
$temp2 = explode("-", $temp1[0]);
$data_formattata = $temp2[2]."/".$temp2[1]."/".$temp2[0];
echo $data_formattata; // stampa 31/05/2012
[/php]

 

In pratica basta prendere il dato, dividerlo in più pezzi in base alla composizione standard dei valori DATETIME e poi “riassemblarlo”.

Questa soluzione è più complessa, ci servono più righe di codice per cui le due soluzioni mostrate prima (che utilizzano le due funzioni di mysql o php) sono da preferire.

Appunto salvato! Per la prossima volta che mi (ci) capiterà di lavorare con le date e mysql+php!