Formattare e gestire le date con database mysql + php

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!

Andrea Giavara. Sono il fondatore di WP Pratico il sito che ti insegna a usare WordPress per creare il tuo sito di successo.
Mi piace tutto ciò che è Digital e amo imparare.
Ora sono amministratore a tempo pieno di Growers, una digital agency focalizzata su un unico obiettivo: aiutare le aziende italiane a crescere grazie alle opportunità del digital!

7 Commenti

  1. Cheope

    Credo sia meglio fare qualche precisazione, specialmente in un post che si propone di spiegare i formati di data ai profani.
    Nell’articolo si parla erroneamente di “formato americano” per indicare yyy-mm-dd. In realtà il formato americano – o meglio il formato anglosassone, tipico dei paesi anglofoni come Germania, Regno Unito e USA – è quello che, per la gioia di noi italiani, inverte giorno e mese: mm-dd-yyyy.
    Il formato yyyy-mm-dd è sì quello usato da MySQL, ma è prima di tutto lo standard ISO 8601, universalmente utilizzato in informatica e non solo, perchè privo di ambiguità rispetto ai vari formati di data localizzati.

    Risposta
    1. Andrea (Autore Post)

      L’articolo si propone di spiegare come lavorare con le date e mysql+php
      Poi come si chiamino i vari formati poco importa 😉

      Comunque grazie della precisazione, effettivamente il formato YYYY-mm-dd è il formato standard Informatico (non americano)

      Risposta
  2. Andrea Rufo

    Qualche tempo fa ho postato sul mio blog una funzione che si propone come possibile soluzione del problema da utilizzare in entrambi i versi (db to str o str to db): http://www.orangedropdesign.com/web/veloce-funzione-php-per-la-conversione-dei-formati-data/

    Risposta
  3. Roberto Codognesi

    Grazie, veramente molto semplice e utile. Ho appena usato il tuo “appunto” per fare uno script che aggiunge un’ora ad una data memorizzata in una tabella di un database di joomla:

    $db = JFactory::getDBO();
    $db->setQuery(“SELECT `date_field` FROM `date table` where `id` = {rrid}”);
    $data = $db->loadResult();
    $temp1 = explode(” “, $data);
    $temp2 = explode(“:”, $temp1[1]);
    $temp2[0] = $temp2[0]+1;
    $unOraInPiu= $temp1[0].” “.$temp2[0].”:”.$temp2[1].”:”.$temp2[2];
    return $unOraInPiu;

    Risposta
    1. Andrea (Autore Post)

      Ottimo! Ovviamente possiamo personalizzarlo e usarlo su qualsiasi db nostro…

      Risposta
  4. Erik

    Buongiorno, ho un problema nel creare il seguente codice
    e un file independente che lo chiamo data.php; e una funzione per salvare la data in mysql ma non riesco a farlo funzionare,

    ecco il codice

    come risultato mi da questo -0000-00-00

    non capisco perche
    spero mi potete aiutare
    grazie

    Risposta
  5. Hide

    Non mi pubblica il commento

    Risposta

Lasciaci un tuo commento!

%d blogger hanno fatto clic su Mi Piace per questo: