2009-12-21 1 views
77

C'è un modo rapido per calcolare la differenza di data in php? Per esempio:Data Differenza in php nei giorni?

$date1 = '2009-11-12 12:09:08'; 
$date2 = '2009-12-01 08:20:11'; 

e poi fare un calcolo, $ date2 meno $ date1

ho letto la documentazione php.net, ma senza fortuna. C'è un modo veloce per farlo?

+0

@kiamlaluno - questo non è un duplicato * esatto *, poiché è molto più complicato (l'OP in quella domanda richiede la formattazione della data come in "x anni, mesi, giorni" ecc.). –

+0

Voglio in "giorni" :) – mysqllearner

risposta

43

strtotime convertirà la stringa di data in un unix timestamp. . (secondi dalla Unix Epoch

$ts1 = strtotime($date1); 
$ts2 = strtotime($date2); 

$seconds_diff = $ts2 - $ts1; 
+11

Si prega di notare che questo potrebbe dare risultati diversi se tra le 2 date c'è un cambio di orario (come in primavera o in autunno). provare questo: echo strtotime ('2013/03/30 21:00') - strtotime ('2013/03/29 21:00'); echo strtotime ('2013-03-31 21:00') - strtotime ('2013-03-30 21:00'); si ottiene 86400 e 82800. i risultati sono in realtà corretto. ma se dividi per 86400 per ottenere il numero di giorni necessario per tenerne conto (meglio usare la funzione di diff di data). – memical

+2

Se sei su una versione moderna di php, usa la soluzione di adam. PHP ha un sacco di codice per tenere conto delle anomalie legate al tempo. – txyoji

161

mi sento di raccomandare di utilizzare data-> diff funzione, come nell'esempio qui sotto:

$dStart = new DateTime('2012-07-26'); 
    $dEnd = new DateTime('2012-08-26'); 
    $dDiff = $dStart->diff($dEnd); 
    echo $dDiff->format('%R'); // use for point out relation: smaller/greater 
    echo $dDiff->days; 

vedere http://www.php.net/manual/en/datetime.diff.php

+2

Questa funzione richiede PHP 5.3 o meglio come affermato da @txyoji – levhita

+13

uso '$ diffInDays = (int) $ dDiff-> format ("% r% a");' per ottenere i valori è possibile utilizzare direttamente come "-2" o "2" (vedere http://www.php.net/manual/en/dateinterval.format.php per le descrizioni dei parametri di formato) – flu

+0

E cambiare "-" in ":" se accidentalmente o non provi a mettere la data con time ... –

13

Di seguito il codice darà la uscita per numero di giorni, togliendo la differenza tra due date ..

$str = "Jul 02 2013"; 
$str = strtotime(date("M d Y ")) - (strtotime($str)); 
echo floor($str/3600/24); 
+0

Quando provo a calcolare la differenza di data per il mio 'DatePicker' JQuery, 'floor' mi sta dando strani risultati. Per esempio, 'floor ((strtotime (((isset ($ _ POST ['date']) e strtotime ($ _ POST ['date']))? $ _POST ['date']: date (" Ymd "))) - strtotime (date ("Ymd")))/3600/24)) "dammi una differenza di 9.9583333333333 tra il 31 marzo e il 21 marzo (quindi 9 con arrotondato quando mi aspetto 10). Ho usato la funzione 'round' per risolvere il problema. –

+0

Sì Jonathan, Hai ragione. –