Berechnen der Stunden zwischen zwei Datumsangaben in PHP.

Marc Wag­ner

Okto­ber 28, 2020

3 min read|

Heu­te zei­ge ich dir, wie du mit PHP die Anzahl an Stun­den zwi­schen zwei Datums­an­ga­ben berech­nen kannst.

Die PHP Klasse #

Zunächst habe ich eine Klas­se geschrie­ben, wel­che die bei­den Datums­an­ga­ben ent­ge­gen­neh­men kann. Zusätz­lich dazu, kann man optio­nal eine Stun­den­an­zahl ange­ben. Die­se Stun­den­an­zahl wird ver­wen­det, wenn immer eine fixe Anzahl an Stun­den pro Tag zurück­ge­ge­ben wer­den soll. Falls du den Para­me­ter nicht angibst, wer­den auto­ma­tisch 24 Stun­den pro Tag berech­net.

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 Berech­nung durch­zu­füh­ren, ste­hen dir fol­gen­de Optio­nen zur Ver­fü­gung:

Tage zwi­schen zwei Datums­an­ga­ben mit PHP berech­nen:

$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.

Stun­den zwi­schen zwei Datums­an­ga­ben mit PHP berech­nen:

$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 Klas­se kannst du:

  • Die Tage zwi­schen zwei Datums­an­ga­ben mit PHP ermit­teln.
  • Die Stun­den zwi­schen zwei Datums­an­ga­ben mit PHP ermit­teln.
  • Eine fixe Anzahl an Stun­den berech­nen anhand der ange­ge­ben Tage.
  • Eine Zeit­span­ne zwi­schen zwei Uhr­zei­ten berech­nen.

Ich hof­fe, das die­ses klei­ne Skript dir bei der Web­ent­wick­lung hilft. Falls du Fra­gen hast, kannst du dich ger­ne mel­den. Natür­lich kannst du auch einen Kom­men­tar mit dei­nem Feed­back hin­ter­las­sen.

88e86fcb816eff22bc917094df2862d8dd5c0e978b333e6dd5f36f808990c261 96

Arti­kel von:

Marc Wag­ner

Hal­lo, Marc hier. Ich bin der Grün­der von Forge12 Inter­ac­ti­ve und bereits seit über 20 Jah­ren lei­den­schaft­lich dabei Web­sei­ten, Online­shops, Anwen­dun­gen und SaaS-Lösun­gen für Unter­neh­men zu ent­wi­ckeln. Vor der Grün­dung habe ich bereits in Bör­sen notier­ten Unter­neh­men gear­bei­tet und mir aller­lei Wis­sen ange­eig­net. Die­ses Wis­sen möch­te ich nun an mei­ne Kun­den wei­ter­ge­ben.

Hast du eine Fra­ge? Hin­ter­lass bit­te einen Kom­men­tar