HOWTO · PHP
Wie man die Zeitdifferenz in Minuten in PHP erhält
Dieser Artikel stellt vor, wie man in PHP die Zeitdifferenz in Minuten erhält. Er enthält die Funktion date_diff() und mathematische Formeln.
Auf dieser Seite
Um die verstrichene Zeit zwischen zwei PHP-Datums- und Zeitwerten in Minuten zu berechnen, ziehen Sie ihre Unix-Zeitstempel voneinander ab und teilen die Differenz durch 60. Verwenden Sie diesen Ansatz, wenn Sie eine Zeitdauer benötigen. Für ein Kalenderintervall verwenden Sie date_diff(); wenn sich die Eingaben als Zeichenfolgen parsen lassen, verwenden Sie strtotime(). Beide Werte müssen sich auf denselben Zeitzonenkontext beziehen. Legen Sie außerdem fest, ob das Ergebnis seine Richtung beibehalten oder einen absoluten Betrag darstellen soll.
Verstrichene Minuten anhand von Zeitstempeln berechnen
DateTimeImmutable macht die Eingabewerte explizit und verhindert, dass sie während der Berechnung verändert werden. Legen Sie für beide Werte eine Zeitzone fest; im Beispiel wird UTC verwendet. Durch das Subtrahieren der Zeitstempel erhalten Sie vorzeichenbehaftete Sekunden der verstrichenen Zeit. Ein späterer Endzeitpunkt ergibt also ein positives Ergebnis, und das Vorzeichen hängt von der Reihenfolge der Subtraktion ab. Verwenden Sie abs() nur dann für die Differenz, wenn die Richtung keine Rolle spielt. Durch die Division durch 60 bleiben Minutenbruchteile erhalten. Verwenden Sie eine Rundungsfunktion nur, wenn die Anwendung ganze Minuten benötigt.
Führen Sie dieses Beispiel aus. Die Ausgabebezeichnung im unveränderten Code lautet weiterhin „Elapsed minutes“ und ist nicht übersetzt:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
<?php
$timezone = new DateTimeZone('UTC');
$start = new DateTimeImmutable('2024-06-16 09:15:00', $timezone);
$end = new DateTimeImmutable('2024-06-16 10:00:00', $timezone);
$elapsedMinutes = ($end->getTimestamp() - $start->getTimestamp()) / 60;
echo "Elapsed minutes: $elapsedMinutes\n";
Für die tatsächlich verstrichene Zeit über einen Wechsel zwischen Sommer- und Winterzeit hinweg verwenden Sie Zeitstempel von Datums- und Zeitwerten mit der vorgesehenen Zeitzone. Gehen Sie in Zeitzonen mit Sommerzeit nicht davon aus, dass jeder Kalendertag genau 1.440 Minuten verstrichener Zeit entspricht.
date_diff() für Kalenderdatumsdifferenzen verwenden
date_diff() (auch als $start->diff($end) verfügbar) gibt ein DateInterval zurück, keine einzelne Anzahl verstrichener Minuten. Die Komponenten für Tage, Stunden und Minuten sind hilfreich, wenn die Frage in Kalenderbegriffen gestellt ist, etwa: „Wie viele Tage, Stunden und Minuten liegen zwischen den beiden Zeitpunkten?“ Die Eigenschaft invert des Intervalls gibt die Richtung an, wenn das Ende vor dem Anfang liegt; mit dem Argument absolute lässt sich diese Richtungsangabe unterdrücken.
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
<?php
$timezone = new DateTimeZone('UTC');
$start = new DateTimeImmutable('2024-06-16 09:15:00', $timezone);
$end = new DateTimeImmutable('2024-06-18 12:30:00', $timezone);
$interval = date_diff($start, $end);
echo $interval->format('%R%a days, %h hours, and %i minutes');
Für ein Kalenderintervall lässt sich aus seinen Komponenten mit $interval->days * 1440 + $interval->h * 60 + $interval->i eine nominale Minutenzahl berechnen. Dabei werden Kalendertage und Uhrzeitkomponenten kombiniert. Wenn Sie bei Zeitzonenwechseln die genau verstrichenen Minuten benötigen, ist dies kein Ersatz für die Subtraktion von Zeitstempeln. Ist die Richtung relevant, behalten Sie das Vorzeichen des Intervalls bei oder wenden Sie es mithilfe von $interval->invert auf den berechneten Betrag an.
Zeitzeichenfolgen mit strtotime() parsen
strtotime() wandelt eine parsebare Datums- und Zeitzeichenfolge in einen Unix-Zeitstempel um. Eine Zeichenfolge, die nur eine Uhrzeit enthält, wird relativ zu einem Datumskontext interpretiert. Geben Sie deshalb vollständige Datumsangaben an, wenn sich die Werte über Mitternacht erstrecken oder zu unterschiedlichen Tagen gehören können. Legen Sie die Standardzeitzone ausdrücklich fest (oder geben Sie in jeder Zeichenfolge eine Zeitzone an), damit beide Zeitstempel den vorgesehenen Kontext verwenden. Die folgende Subtraktion behält das Vorzeichen des Ergebnisses bei; verwenden Sie für eine vorzeichenlose Zeitdauer abs().
Die Ausgabebezeichnung im unveränderten Code lautet weiterhin „Elapsed minutes“ und ist nicht übersetzt:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
<?php
date_default_timezone_set('UTC');
$start = strtotime('2024-06-16 23:30:00 UTC');
$end = strtotime('2024-06-17 00:15:00 UTC');
$minutes = ($end - $start) / 60;
echo "Elapsed minutes: $minutes\n";
Prüfen Sie beim Parsen nicht vertrauenswürdiger oder variabler Eingaben vor der Subtraktion, ob jeder Aufruf einen Zeitstempel zurückgegeben hat. Das Parsen kann fehlschlagen und false zurückgeben. Für Anwendungsdaten, bei denen eine eindeutige Zeitzonenbehandlung wichtig ist, empfiehlt es sich, DateTimeImmutable-Werte mit einer expliziten Zeitzone zu erstellen. Verwenden Sie strtotime() für das kompakte Parsen, die Subtraktion von Zeitstempeln für verstrichene Zeitdauern und date_diff(), wenn Sie das Kalenderintervall selbst beschreiben möchten.