Compago

...free knowledge

 
  • Increase font size
  • Default font size
  • Decrease font size
Home Manuali Programmazione Gestione delle date in PHP e MYSQL

Gestione delle date in PHP e MYSQL

E-mail Stampa PDF

Nella programmazione PHP è quasi inevitabile imbattersi nella gestione dei database ed in particolare in MySQL.
Uno dei problemi che potrebbero insorgere è la natura delle date in PHP e in MySQL, infatti il primo usa timestamps unix per tutte le funzioni relative alle date. Il timestamp è semplicemente un intero senza segno, e per la precisione  è il numero di secondi trascorsi dalla mezzanotte del 1 Gennaio 1970 (in base all'ora di Greenwich).
Il PHP ha metodi per convertire questi timestamps in praticamente qualsiasi formato testuale possiate desiderare ma internamente usa il formato timestamp, quindi anche nel formato DATETIME di MYSQL.

MySQL, invece, ha a disposizione tre tipi di campi data: DATETIME, DATE, e TIMESTAMP.
Un campo DATETIME non è altro che una stringa contenente data e orario nel formato AAAA-MM-GG HH:MM:SS (es. 2012-10-20 10:20:12).
Un campo DATE è sempre una stringa che riguarda solo la parte della data del formato precedente AAAA-MM-GG (es. 2012-10-20).
Un campo TIMESTAMP, nonostante il nome, non ha nulla a che fare con il timestamp unix usato in PHP. Potremo considerare un campo TIMESTAMP come un campo DATETIME che si aggiorna automaticamente all'orario corrente ogni volta che i contenuti del campo vengono modificati.

Quando sarà necessario leggere o scrivere una data da PHP in MySQL si può procedere in tanti modi.

Il primo, per quento riguarda la scrittura nel database, consiste nel trasformare il timestamp PHP, che è un numero intero, in una stringa nel formato DATETIME.

$mysqldate = date( 'Y-m-d H:i:s', $phpdate );

e in lettura si fa la conversione opposta:

$phpdate = strtotime( $mysqldate );


Il secondo metodo consiste nell'usare alcue funzioni del database MySQL, le quali consentono di convertire i dati nel momento in cui accediamo al database. UNIX_TIMESTAMP converte il formato DATETIME nel timestamp di PHP e FROM_UNIXTIME converte il timestamp di PHP nel DATETIME di MySQL.
Le funzioni vengono usate all'interno della query SQL. Perciò un esempio di query in lettura sarà:

$query = "SELECT UNIX_TIMESTAMP(datetimefield)  FROM table WHERE...";

Mentre un esempio di query che inserisce i dati sarà:

$query = "UPDATE table SET datetimefield = FROM_UNIXTIME($phpdate)   WHERE...";


Il terzo metodo consiste semplicemente usare il timestamp di PHP come un numero intero scrivendolo e leggendolo da un campo MySQL di tipo intero. Dato che il timestamp di PHP è un numero intero senza segno, sarà sufficiente usare un campo INTEGER senza segno nel MySQL per salvare il timestamp.
Procedendo in questo modo verranno evitate le conversioni e sarà sempre possibile ordinare o confrontare i dati poichè i timestamp di PHP aumentano in modo regolare nel tempo, ma se vorrete usare una qualsiasi delle funzioni data o tempo di MySQL dovrete prima usare la funzione FROM_UNIXTIME per ottenere un valore MySQL DATETIME.
Ad ogni modo, i dati verranno usati e trasformati in PHP ed il database è usato solo per conservarli allora questa soluzione non crea nessun problema.

 
Loading

Login




Chiudi