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.
Comments (4 Comments)
Oppure se si usa il formato americano Y-m-d si possono comunque confrontare due date con gli operatori logici
si, in effetti anche cosi funziona
Salve. Sto utilizzando questa guida per la visualizzazione a tempo determinato di banner pubbicitari. Tuttavia, riscontro un problema per la loro visualizzazione a seconda della data impostata. Nel codice che riporto sotto, ad esempio, non vengono visualizzati i banner 1.jpg e 2.jpg mentre il banner 3.jpg viene visualizzato.
Non riesco a capire dove ci sia errore. Potrei ricevere un aiuto, per favore?
Ringrazio anticipatamente per la cortese attenzione.
‘immagini/banners/1.jpg’,
‘start’ => ’20-11-2017′,
‘end’ => ’20-11-2018′,
‘url’ => ‘no’,
‘website’ => ‘no’
),
array(
‘image’ => ‘immagini/banners/2.jpg’,
‘start’ => ’20-11-2017′,
‘end’ => ’20-05-2018′,
‘url’ => ‘http://www.sitowebaziendale.com/’,
‘website’ => ‘yes’
),
array(
‘image’ => ‘immagini/banners/3.jpg’,
‘start’ => ’10-11-2017′,
‘end’ => ’30-11-2018′,
‘url’ => ‘no’,
‘website’ => ‘no’
)
);
shuffle($banners);
?>
Sponsor
$start && $today < $end && $banner['website'] == "yes") {
echo "\n”;
}
if($today > $start && $today < $end && $banner['website'] == "no") {
echo "\n”;
}
}
?>
Testato l’8/5/2024, perfettamente funzionante.
Grazie.