Berechnen der Stunden zwischen zwei Datumsangaben in PHP.

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.

Hinterlasse einen Kommentar

Nach oben