Berechnen der Stunden zwischen zwei Datumsangaben in PHP.
Marc Wagner
Oktober 28, 2020
Heute zeige ich dir, wie du mit PHP die Anzahl an Stunden zwischen zwei Datumsangaben berechnen kannst.
Die PHP Klasse #
Zunächst habe ich eine Klasse geschrieben, welche die beiden Datumsangaben entgegennehmen kann. Zusätzlich dazu, kann man optional eine Stundenanzahl angeben. Diese Stundenanzahl wird verwendet, wenn immer eine fixe Anzahl an Stunden pro Tag zurückgegeben werden soll. Falls du den Parameter nicht angibst, werden automatisch 24 Stunden pro Tag berechnet.
class CompareDate {
/**
* @var false|int
*/
private $_dateEnd;
/**
* @var false|int
*/
private $_dateStart;
/**
* @var int
*/
private $_hoursByDay;
public function __construct( string $dateStart, string $dateEnd, int $hoursByDay = 0 ) {
$this->setDateStart( $dateStart );
$this->setDateEnd( $dateEnd );
$this->setHoursByDay( $hoursByDay );
}
private function setDateStart( string $date ) {
$this->_dateStart = strtotime( $date );
}
private function setDateEnd( string $date ) {
$this->_dateEnd = strtotime( $date );
}
private function setHoursByDay( int $hours ) {
$this->_hoursByDay = $hours;
}
private function isTimeSet() {
$hourStart = date( "H", $this->_dateStart );
$hourEnd = date( "H", $this->_dateEnd );
$minuteStart = date( "i", $this->_dateStart );
$minuteEnd = date( "i", $this->_dateEnd );
if ( ( $hourStart == 0 && $hourEnd == 0 && $minuteStart == 0 && $minuteEnd == 0 ) || $this->_hoursByDay != 0 ) {
return false;
}
return true;
}
private function getHoursByDay( int $default = 0 ) {
if ( $default != 0 && $this->_hoursByDay == 0 ) {
return $default;
}
return $this->_hoursByDay;
}
public function getDiffHours() {
if ( $this->isTimeSet() ) {
$days = $this->getDiffDays();
$start = $this->getDateStart();
$end = $this->getDateEnd();
$DateTimeStart = new DateTime( $start );
$DateTimeEnd = new DateTime( $end );
$hours = $days * 24;
$hours += $DateTimeStart->diff( $DateTimeEnd )->h;
return $hours;
} else {
$days = $this->getDiffDays( true );
$hours = $this->getHoursByDay( 24 );
return $days * $hours;
}
}
private function getFormattedDate( string $date ): string {
return date( 'd.m.Y H:i', $date );
}
private function getDateStart(): string {
return $this->getFormattedDate( $this->_dateStart );
}
private function getDateEnd(): string {
return $this->getFormattedDate( $this->_dateEnd );
}
public function getDiffDays( bool $includeToday = false ): int {
$start = $this->getDateStart();
$end = $this->getDateEnd();
$DateTimeStart = new DateTime( $start );
$DateTimeEnd = new DateTime( $end );
$days = $DateTimeStart->diff( $DateTimeEnd )->days;
if ( $includeToday ) {
$days += 1;
}
return $days;
}
}
So verwendest du die Klasse. #
Um nun eine Berechnung durchzuführen, stehen dir folgende Optionen zur Verfügung:
Tage zwischen zwei Datumsangaben mit PHP berechnen:
$DateObject = new CompareDate('20.03.2020', '21.03.2020', 8);
echo $DateObject->getDiffDays();
// Output: 1
echo $DateObject->getDiffDays(true);
// Output: 2 - zählt ebenfalls den aktuellen Tag.
Stunden zwischen zwei Datumsangaben mit PHP berechnen:
$DateObject = new CompareDate('20.03.2020', '20.03.2020');
echo $DateObject->getDiffHours();
// Output: 24 - Falls keine Stunden angegeben wird jeder Tag mit 24 berechnet.
$DateObject = new CompareDate('20.03.2020', '20.03.2020', 8);
echo $DateObject->getDiffHours();
// Output: 8 - Falls keine Stunden angegeben wird jeder Tag mit 24 berechnet.
$DateObject = new CompareDate('20.03.2020 16:00', '20.03.2020 17:00');
echo $DateObject->getDiffHours();
// Output: 1
Das war es auch schon. Mit der Klasse kannst du:
- Die Tage zwischen zwei Datumsangaben mit PHP ermitteln.
- Die Stunden zwischen zwei Datumsangaben mit PHP ermitteln.
- Eine fixe Anzahl an Stunden berechnen anhand der angegeben Tage.
- Eine Zeitspanne zwischen zwei Uhrzeiten berechnen.
Ich hoffe, das dieses kleine Skript dir bei der Webentwicklung hilft. Falls du Fragen hast, kannst du dich gerne melden. Natürlich kannst du auch einen Kommentar mit deinem Feedback hinterlassen.
Artikel von:
Marc Wagner
Hallo, Marc hier. Ich bin der Gründer von Forge12 Interactive und bereits seit über 20 Jahren leidenschaftlich dabei Webseiten, Onlineshops, Anwendungen und SaaS-Lösungen für Unternehmen zu entwickeln. Vor der Gründung habe ich bereits in Börsen notierten Unternehmen gearbeitet und mir allerlei Wissen angeeignet. Dieses Wissen möchte ich nun an meine Kunden weitergeben.