web-dev-qa-db-de.com

Wie finde ich die Stundendifferenz zwischen zwei Daten in PHP?

Ich habe zwei Datumsangaben, die wie "Y-m-dH: i: s" formatiert sind. Ich muss diese beiden Daten vergleichen und den Stundenunterschied herausfinden.

26
mike

Sie können sie in Zeitstempel konvertieren und von dort aus gehen:

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

Durch 3600 dividieren, da 3600 Sekunden in einer Stunde vergehen und round() verwendet wird, um zu vermeiden, dass viele Dezimalstellen auftreten.

57
Aillyn

Sie können DateTime-Schnittstelle auch verwenden -

$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;
15
Sougata Bose
$seconds = strtotime($date2) - strtotime($date1);
$hours = $seconds / 60 / 60;
4
Philippe Gerber

Als Ergänzung zur akzeptierten Antwort möchte ich daran erinnern, dass \DateTime::diff verfügbar ist!

$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

\DateInterval Dokumentation.

4
Paul T. Rawkeen
$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;
1
user3608756

Sie können strtotime() verwenden, um Ihre Zeichenfolgen zu analysieren und den Unterschied zwischen den beiden Zeichen zu machen.


Ressourcen:

0
Colin Hebert

Dies ist aus Gründen der Tageszeitersparnis . Die Sommerzeit (USA) 2014 begann um 2:00 Uhr am Sonntag, 9. März.

Sie verlieren eine Stunde im Zeitraum von $ date1 = "2014-03-07 05:49:23" bis $ Date2 = "2014-03-14 05:49:23";

0
eedue

Sie können dies versuchen:

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

Das Problem ist, dass bei Verwendung dieser Werte das Ergebnis 167 ist und 168 sein sollte:

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