Home » Xhtml, Css e Ajax » Formattare e gestire le date con database mysql + php

Formattare e gestire le date con database mysql + php

Scritto da il 28 maggio 2012 in Xhtml, Css e Ajax - 5 Commenti - 3368 visite

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!

L'Autore

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!

archiveArchivio autore

5 Commenti

  1. Scritto il 30 maggio 2012 alle 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.

  2. Andrea
    Scritto il 31 maggio 2012 alle 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)

  3. Scritto il 2 giugno 2012 alle 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/

  4. Roberto Codognesi
    Scritto il 24 gennaio 2013 alle 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;

  5. Andrea
    Scritto il 27 gennaio 2013 alle 22:26

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

Scrivi un commento!

© 2013 Italian webdesign. Diritti riservati. Ideato da Laura Gargiulo - Icone di Komodo Media - Logo di W3B.

Read previous post:
d7-contributor-cloud-huge
Cercasi Web designer junior con conoscenza di drupal

Ci è arrivata questa nuova richiesta per un web designer junior, che conosca drupal Start-up internet legata al settore dei...

Close