2010-09-21 20 views
23

Mam dwie daty, sformatowane jak "Y-m-d H: i: s". Muszę porównać te dwie daty i obliczyć różnicę godzin.Jak znaleźć różnicę godzin między dwiema datami w PHP?

+3

Czy próbowałeś coś? Na przykład możesz przekonwertować je zarówno na znaczniki czasu unix (sekundy) za pomocą 'strtotime', a następnie odjąć je, a następnie podzielić przez 3600, aby uzyskać godziny – Fanis

+0

Tak, dzieliłem przez 24 zamiast 3600. doh! – mike

Odpowiedz

48

można konwertować je do znaczników czasu i go stamtąd:

$hourdiff = round((strtotime($time1) - strtotime($time2))/3600, 1); 

Dzielenie przez 3600, ponieważ istnieje 3600 sekund w ciągu jednej godziny i obsługiwanie round(), aby uniknąć konieczności wiele miejsc po przecinku.

+0

dziękuję, to właśnie próbowałem, ale próbowałem podzielić przez 24. – mike

+3

Użycie 'strtotime()' jest ** nie najlepszym sposobem ** zarządzania datami. Rozważ użycie '\ DateTime :: createFromFormat ($ date, 'Y-m-d H: i: s') -> diff ($ dto2)' lub podobnej funkcjonalności do pracy z datami (_ + znamy format, który spodziewamy się parsować_). Na zewnątrz jest już prawie 2015, róbmy rzeczy w elegancki sposób! –

+1

poza tym, że createFromFormat przyjmuje format $ $ jako pierwszy parametr;) '\ DateTime :: createFromFormat ('Y-m-d H: i: s', $ date) -> diff ($ dto2)' – Asmodiel

4
$seconds = strtotime($date2) - strtotime($date1); 
$hours = $seconds/60/60; 
0

Możesz użyć strtotime(), aby przetworzyć struny i zrobić różnicę między nimi dwoma.


Zasoby:

+2

Pokaż kod. –

0

Problem polega na tym, że za pomocą tych wartości wynik jest 167, a powinno być 168:

$date1 = "2014-03-07 05:49:23"; 
$date2 = "2014-03-14 05:49:23"; 
$seconds = strtotime($date2) - strtotime($date1); 
$hours = $seconds/60/60; 
4

Jako dodatek do przyjętych ans Chciałbym przypomnieć, że \DateTime::diff jest dostępna! Dokumentacja:

$f = 'Y-m-d H:i:s'; 
$d1 = \DateTime::createFromFormat($date1, $f); 
$d2 = \DateTime::createFromFormat($date2, $f); 

/** 
* @var \DateInterval $diff 
*/ 
$diff = $d2->diff($d1); 
$hours = $diff->h + ($diff->days * 24); // + ($diff->m > 30 ? 1 : 0) to be more precise 

.

9

Można użyć interfejsu DateTime Również -

$d1= new DateTime("06-08-2015 01:33:26pm"); 
$d2= new DateTime("06-07-2015 10:33:26am"); 
$interval= $d1->diff($d2); 
echo ($interval->days * 24) + $interval->h; 
0

Można spróbować to:

$dayinpass = "2016-09-23 20:09:12"; 
$today = time(); 
$dayinpass= strtotime($dayinpass); 
echo round(abs($today-$dayinpass)/60/60); 
0

Wynika to z dnia oszczędność czasu. Czas letni (Stany Zjednoczone) 2014 rozpoczął się o godzinie 02:00 w niedzielę, 9 marca.

Utracisz jedną godzinę w okresie od $ date1 = "2014-03-07 05:49:23" do $ date2 = "2014-03-14 05:49:23";

0
$date1 = date_create('2016-12-12 09:00:00'); 

$date2 = date_create('2016-12-12 11:00:00'); 

$diff = date_diff($date1,$date2); 

$hour = $diff->h; 
Powiązane problemy