Differenza date in PHP

Mattepuffo's logo
Differenza date in PHP

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!


Condividi

2 Commenti

  • fermat

    ciao! ho corretto grazie!

    26/06/2017
  • Dario Fiorentino

    Ciao, nell'ultima riga di codice c'è un piccolo errore di battitura: echo $diff->format('%y anni %m mesi %d giorni') . '<br>';

    24/06/2017

Commentami!