Zeitberechnung in PHP?
Hallo.
Ich versuche gerade eine Zeitberechnung in PHP. Gegeben sind 2 Input felder mit DateTime date("Y-m-d H:i")
Folgendes habe ich
$begin = new DateTime($start, new \DateTimeZone('UTC')); // Start Umwandlung in DateTime
$end = new DateTime($end, new \DateTimeZone('UTC')); // Ende Umwandlung in DateTime
$end = $end->sub(new DateInterval('PT0H30M')); // Ziehe Pause ab
$differenz = $begin->diff($end); // Berechne Differenz
$arbeitszeit = $differenz->format('%H:%I'); // Ausgabe in HH:ii
Damit bekomme ich die Arbeitszeit in Std:Min
Nun brauche ich aber noch die + oder - Stunden zu unserer Richtarbeitszeit von 7,5 Std.
Also bei 6:30 brauche ich - 1,00 oder bei 7 Stunden - 0,30
Wie mache ich das am besten. bin schon die ganze Zeit am Probieren mit ->sub und ->diff, aber bekomme immer falsche Werte
2 Antworten
Hi TrucksLOG,
das geht relativ entspannt wenn man die Anfangszeit und Endzeit in Unix-Zeit umwandelt um dann die Differenz zu berechnen, das wiederum in Stunden und Minuten umgewandelt wird. Hier mein Beispiel:
<?php
// Angenommen, die Zeiten kommen als POST-Request rein
// Daten werden nicht geprüft bzw. validiert für diese Beispiel
$startTime = $_POST['start_time']; // z. B. "08:30"
$endTime = $_POST['end_time']; // z. B. "17:15"
// Zeitangaben in UNIX-Timestamp umwandeln
// Ich arbeite gerne mit UNIX-Zeit und wandle diese später einfach um
$startTimestamp = strtotime($startTime);
$endTimestamp = strtotime($endTime);
// Berechnung der Differenz in Sekunden, damit wir die Differenz erhalten und diese nutzen können
$diffInSeconds = $endTimestamp - $startTimestamp;
// Umrechnung in Stunden und Minuten: Berechnung auch mit Modulo-Operator, das den Rest der Division berechnet
$hours = floor($diffInSeconds / 3600);
$minutes = floor(($diffInSeconds % 3600) / 60);
// Ausgabe des Ergebnisses als String
echo "Gearbeitete Zeit: $hours Stunden und $minutes Minuten";
?>
Viel Erfolg ;-)
Rechne dir doch erst einmal die tatsächliche Arbeitszeit in Minuten um:
$totalMinutesDiff = $differenz->h * 60 + $differenz->i;
Und anschließend kannst du diesen Wert mit 450 (7 * 60 + 30) subtrahieren.
$totalMinutesDiff - 450;
Dann hast du die Anzahl an Minuten, die entweder fehlen oder zusätzlich geleistet wurden.