calendar

Formattare e gestire le date con database mysql + php

calendar2 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

$data_input = "31/05/2012";
$query = "INSERT INTO table VALUES('" . STR_TO_DATE($data_input, '%d/%m/%Y' )."')";

 

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:

$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"

 

 

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

$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

 

 

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.

// $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

 

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!

share small Formattare e gestire le date con database mysql + php
Avatar of Andrea Andrea. Internet per me è una passione... che ti cambia la vita! Sono innamorato di webmarketing, seo e adoro la comunicazione. Ormai sono webmaster da parecchi anni. Hai bisogno di un consiglio? Contattami!

5 Comments

  • Cheope

    30 maggio 2012, 10:51

    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.

    • Avatar of Andrea

      Andrea

      31 maggio 2012, 00:43

      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)

  • Andrea Rufo

    2 giugno 2012, 19:10

    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/

  • Roberto Codognesi

    24 gennaio 2013, 16:25

    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;

    • Avatar of Andrea

      Andrea

      27 gennaio 2013, 22:26

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

Add Comment Register



Lascia un Commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>