2012-05-06 16 views
16

Mam dwie daty w phpodejmując dwie daty w php

$date1 = 'May 3, 2012 10:38:22 GMT' 

$date2 = '06 Apr 2012 07:22:21 GMT' 

Potem odejmujemy oboje

$date2 - $date1 

i uzyskać

Result:6 

Dlaczego jest wynikiem 6 a nie 27? ...? Jak mogę odjąć te dwie daty i sprawić, że zwróci mi wynik oparty na różnicach w miesiącu, odejmując lata & dni &?

Odpowiedz

43

Część 1: Dlaczego wynik 6?

Daty są po prostu ciągami po ich odjęciu. PHP próbuje przekonwertować je na liczby całkowite. Czyni to poprzez konwersję do pierwszego nieliczbowego. Zatem data 2 to 6, a data 1 to 0.

Część 2: Jak to działa?

$datetime1 = strtotime('May 3, 2012 10:38:22 GMT'); 
$datetime2 = strtotime('06 Apr 2012 07:22:21 GMT'); 

$secs = $datetime2 - $datetime1;// == <seconds between the two times> 
$days = $secs/86400; 

Konwertuj odpowiednio.

+0

muszę konwertować sekundy między dwa dni times..to .. nie jest szybsza droga –

+0

sekund w ciągu dnia = 60 * 60 * 24 = 86 400, więc po prostu podziel się przez to. – evan

+0

Świetne rozwiązanie @evan. Kciuki w górę (y) – NullPointer

9

Korzystanie DateTime i DateInterval,

$date1 = new DateTime("May 3, 2012 10:38:22 GMT"); 
$date2 = new DateTime("06 Apr 2012 07:22:21 GMT"); 
echo $date1->diff($date2)->format("%d"); 
+0

To zwróci mi różnicę w dniach .. bo to jest to, co chcę .. znaleźć różnicę dat –

+0

Czy tego nie chcesz? –

+0

tak, to jest ..... dzięki –

12

Jest jeden sposób na wykorzystanie mktime n uczynić datę w datownik, a następnie odjąć, a następnie użyć funkcji daty, aby pokazać na drodze u chce ....

Inny sposób jest to, że zarówno w formacie dat w tym samym formacie, a następnie odjąć ....

Trzeci sposób

$date1= new DateTime("May 3, 2012 10:38:22 GMT"); 
$date2= new DateTime("06 Apr 2012 07:22:21 GMT"); 
echo $date1->diff($date2)->("%d"); 

naprzód sposób

$datetime1 = strtotime('May 3, 2012 10:38:22 GMT'); 
$datetime2 = strtotime('06 Apr 2012 07:22:21 GMT'); 
$secs = $datetime2 - $datetime1;// == return sec in difference 
$days = $secs/86400; 
5
$todate= strtotime('May 3, 2012 10:38:22 GMT'); 
$fromdate= strtotime('06 Apr 2012 07:22:21 GMT'); 
$calculate_seconds = $todate- $fromdate; // Number of seconds between the two dates 
$days = floor($calculate_seconds/(24 * 60 * 60)); // convert to days 
echo($days); 

Kod ten znajdzie różnicę pomiędzy dwoma datami daty ..

Tutaj wyjście jest 27

5

Większość z prezentowanych rozwiązań wydaje się działać, ale wszyscy zapomina o jednej rzeczy: czasie.

Biorąc Evan przykład:

$datetime1 = strtotime('May 3, 2012 10:38:22 GMT'); 
$datetime2 = strtotime('06 Apr 2012 07:22:21 GMT'); 

$secs = $datetime2 - $datetime1;// == <seconds between the two times> 
$days = $secs/86400; 

Kiedy nie przyciąć część czasu, co może prowadzić do milscalculations. Na przykład: Przedział między 2014-05-01 14:00:00 (Y-m-d) i 2014-05-02 07:00:00 będzie wynosił 0, xxx, nie 1. Należy przyciąć część czasu każdej daty.

Tak powinno być:

$datetime1 = strtotime(date('Y-m-d', strtotime('May 3, 2012 10:38:22 GMT'))); 
$datetime2 = strtotime(date('Y-m-d', strtotime('06 Apr 2012 07:22:21 GMT'))); 

$secs = $datetime2 - $datetime1;// == <seconds between the two times> 
$days = $secs/86400; 
0
echo 'time'.$notification_time= "2008-12-13 10:42:00"; 
date_default_timezone_set('Asia/Kolkata'); 
echo 'cureen'.$currenttime=date('Y-m-d H:i:s'); 
$now = new DateTime("$notification_time"); 
$ref = new DateTime("$currenttime"); 
$diff = $now->diff($ref); 
printf('%d days, %d hours, %d minutes', $diff->d, $diff->h, $diff->i); 
0

Jeśli chcesz użyć diff (zwraca Dateinterval Object) metoda, właściwa droga jest do formatowania z% a.To znaczy:

Jeśli zaznaczysz http://php.net/manual/en/dateinterval.format.php

Poprawny sposób to:

echo $date1->diff($date2)->format("%a"); 

Uzyskania wszystkie dni

+0

nazwa metody została pominięta, poprawna to: echo $ date1-> diff ($ date2) -> format ("% a"); –

+0

jesteś prawdą, będę edytować moją odpowiedź. Dzięki –