Come confrontare 2 date in PHP

Un problema che ho riscontrato recentemente in PHP è stato quello di confrontare 2 date in PHP su un sito WordPress che sulla homepage elencava degli eventi, e per ogni evento dovevo verificare se la data era più recente della data odierna. Se lo era, era quindi un evento in programmazione, se no, era passato.

Ho installato il plugin per WordPress Types e creato un campo personalizzato “Data” , che ti fa scegliere la data dell’evento da un calendario fatto in Javascript (se avete usato il plugin sapete di cosa sto parlando).

Sulla homepage poi ho dovuto metterci un semplice codice PHP che controlla se questa data è maggiore della data odierna.

$todays_date = date("d-m-Y");

Con questa riga di codice prendiamo la data di oggi. L’altra data è memorizzata in una variabile $event_date. Per esempio:

$event_date = "16-03-2013";

Adesso la parte ingannevole arriva quando dobbiamo inserire il condizionale IF:

if (todays_date < $event_date)  
{ //allora è un'evento in programmazione }
else 
{ //allora è un'evento passato }

Questo codice non può funzionare perché se abbiamo per esempio la data dell’evento 16-03-2013 e la data odierna 11-04-2013 il condizionale IF ci dirà che la data dell’evento è maggiore perché 16 è maggiore di 11, anche se in realtà 11 aprile è più recente di 16 marzo.

Allora la soluzione per il confronto delle 2 date in PHP arriva con la funzione strtotime() che trasforma ogni formato di data in un formato UNIX timestamp. In pratica converte la data in secondi, partendo dalla data di default che è 1 gennaio 1970 (00:00:00 GMT).

Il codice sarebbe cosi:

$today_stamp = strtotime($todays_date);
$event_date_stamp = strtotime($event_date); 
if ($event_date_stamp > $today_stamp)
{ //allora è un'evento in programmazione } 
else 
{ //allora è un'evento passato }

Adesso è molto più efficiente il condizionale perché è come se paragonassimo 2 variabili intere normali.