Differenza date in PHP
EDIT in fondo
La gestione del tempo è sempre abbastanza problematica, in qualsiasi linguaggio.
Oggi vediamo un semplice modo per contare la differenza tra due date.
Prima di tutto dovete impostare l'orario nello stesso formato.
Quindi se gli orari li prendete da db controllate in che modo vengono salvati.
Nel caso specifico dobbiamo vedere se una data salvata nel db è anteriore a oggi.
Nel database la data è in formato DATE, e quindi non tiene conto dell'ora.
Inoltre è salvata nel formato Anno-Mese-Giorno.
Quindi prima di tutto ci calcoliamo la data di oggi:
$dateToday = date('Y-m-d');
mantenendo il formato uguale a quello del db.
Dopo di che eseguiamo la query e facciamo quello che dobbiamo fare:
foreach ($objAdminConn->getDateDabase() as $var) {
$dateFineProm = $var['fine'];
if ($dateToday < $dateFineProm) {
echo 'Mancano ' . (strtotime($dateFineProm) - strtotime($dateToday)) / (86400) . ' giorni alla fine della promozione';
}
Se oggi è prima della data trovata su db mi calcoli quanti giorni mancano.
Ovviamente la query fatela come volete.
Per calcolare la differenza facciamo prima una trasformazione della data con la funzione strtotime, e poi dividiamo per 86400.
La funzione strtotime trasforma le date nel formato timestamp UNIX.
EDIT
Aggiungiamo un'altra modalità, usando la funzione date_diff presente da PHP 5.3.
$date1 = new DateTime("now");
$date2 = new DateTime('1971-10-08');
$diff = date_diff($date1, $date2);
echo $diff->format('%y anni %mesi %d giorni) . '<br>';
Usiamo un oggetto DateTime per impostare le date.
Poi usiamo la funzione date_diff per calcolare la differenza tra le due.
Infine formattiamo il risultato con la funzione format.
Codice a oggetti e più compatto.
Ciao!
php date time strtotime mysql
2 Commenti
ciao! ho corretto grazie!
26/06/2017Ciao, nell'ultima riga di codice c'è un piccolo errore di battitura: echo $diff->format('%y anni %m mesi %d giorni') . '<br>';
24/06/2017