Trasformare una data in tempo Unix in PHP

Autore:  Angelo Iasevoli

Avere a che fare con le date è una delle situazioni più comuni quando si realizza un’applicazione. C’è spesso la necessità di capire in che ordine due eventi sono avvenuti l’uno rispetto all’altro.

Questo è un esempio elementare, ma si possono trovare situazioni molto più complesse come ad esempio quelle riscontrabili durante la realizzazione di un’agenda.

orologi

Salvare in un database una data in formato “umano” non è una buona mossa.

Diventerà difficile ordinare le tabelle utilizzando una colonna costituita da date (es.: ’22/07/1990′). Come possiamo cavarcela in maniera elegante ed efficiente? Semplice: utilizzando il tempo Unix (i secondi trascorsi dal 1° gennaio 1970).

Vedremo di creare 2 funzioni capaci di trasformare una data in tempo Unix e di riconvertire quest’ultimo in tempo umano.

La funzione DaiTempoUnix

Creiamo innanzitutto la funzione che a partire da data ed ora ci restituisce il tanto adorato tempo Unix.

Si tratterà di una funzione che in entrata richiede solamente due campi: data ed ora.

<?
function DaiTempoUnix($data,$ora){

$data_arr = explode("/", $data); //ricaviamo un array dalla data

$ora_arr = explode(":", $ora);  //ricaviamo un array dall'ora

$secondi = $ora_arr[2];
if(!$ora_arr[2]) $secondi =0; //serve nel caso in cui non siano stati scritti i secondi (spesso non sono considerati)

$UnixTime = mktime($ora_arr[0], $ora_arr[1], $secondi, $data_arr[1], $data_arr[0], $data_arr[2]); //mktime ci consente di ottenere il time Unix corrispondente alla data

return $UnixTime;

}

$TempoUnix = DaiTempoUnix("22/07/1990", "13:12:24"); // esempio di richiamo della funzione
?>

Nella funzione si è ipotizzato che le componenti della data siano separate da “/” e le componenti dell’ora da “:”. Per impostare altri simboli basterà applicare una piccola modifica all’explode.

Passiamo ora alla seconda funzione.

La funzione DaiData

Questa funzione è anche più semplice della prima. In ingresso avrà il tempo Unix mentre in uscita conterrà un array con due valori: data ed ora.

<?
function DaiData($UnixTime){

$data = date("d/m/Y", $UnixTime); //da time unix a data
$ora = date("H:i:s", $UnixTime);//da time unix a ora
$row_data = array('data' => $data, 'ora' => $ora); // Creo l'array
return $row_data;

}

$row_data = DaiData("1033902472"); //esempio di utilizzo della funzione

$data = $row_data[data];
$ora = $row_data[ora];

?>

Come potete vedere sono bastate pochissime righe di codice.

Utilizzando queste due funzioni sarà più semplice organizzare e gestire le date nelle nostre applicazioni. Forse l’unica nota dolente che vale la pena citare è che questo script potrebbe dare problemi dal 19 gennaio 2038 alle ore 03:14:08 (GMT).

In quel giorno, infatti, il tempo unix raggiungerà i 231 caratteri (troppi per i sistemi operativi a 32bit). Questo evento è noto come Bug dell’anno 2038.

Conoscete altre soluzioni? :-)

PS: Perdonate la scarsa fantasia dimostrata nel dare un nome alle due funzioni… ;)