Ich bin derzeit mit einem Problem in strtotime()
Funktion stecken. Ich bereite einen Zeitplan für meine Arbeit vor, bei dem Benutzer ihre Arbeitszeiten eingeben können und das Skript alle Variablen aus einer XML-Datei bekommt und ein PDF erstellt ... funktioniert alles glatt, aber es gibt ein seltsames Problem beim Eingeben einer Nachtschicht.PHP strtotime Problem bei der Ausführung von 2 Tagen
Also entwarf ich ein Debug-Beispiel, bei dem ein Benutzer seine Arbeit um 21:00 Uhr (21:00 Uhr) beginnt und um 6:00 Uhr (6:00 Uhr) beendet. Ich möchte die genaue eingegebene Arbeitszeit so I strtotime()
jedes Mal und vergleichen Sie sie.
Ich denke, das Problem ist, weil Startzeit am Tag 1 und Ende ist am Tag 2, aber das Skript denkt, es ist immer noch am ersten Tag ... Sorry, aber ich habe keine Lösung gefunden, so hoffe ich, jemand hier kann mir helfen.
Beispielcode:
<?php
set_time_limit(0);
date_default_timezone_set('Europe/Berlin');
$start = '20:30';
$finish = '06:30';
$break_1_Start = '20:45';
$break_1_End = '21:00';
$break_2_Start = '00:00';
$break_2_End = '00:30';
$break_3_Start = '03:00';
$break_3_End = '03:30';
$break_4_Start = '06:00';
$break_4_End = '06:15';
/**
* Minus when + 1 day
*/
$workTime = strtotime($finish) - strtotime($start);
$break1 = strtotime($break_1_End) - strtotime($break_1_Start);
$break2 = strtotime($break_2_End) - strtotime($break_2_Start);
$break3 = strtotime($break_3_End) - strtotime($break_3_Start);
$break4 = strtotime($break_4_End) - strtotime($break_4_Start);
$workTime = $workTime - $break1 - $break2 - $break3 - $break4;
$workTime = $workTime/60;
$workTime = $workTime/60;
echo 'Work Time: '.$workTime;
?>
EDIT: eine Abhilfe gefunden, die jetzt funktioniert, aber vielleicht hat jemand eine bessere Lösung
Code:
<?php
set_time_limit(0);
date_default_timezone_set('Europe/Berlin');
$start = strtotime('20:30');
$finish = strtotime('06:30');
$break_1_Start = strtotime('20:45');
$break_1_End = strtotime('21:00');
$break_2_Start = strtotime('00:00');
$break_2_End = strtotime('00:30');
$break_3_Start = strtotime('03:00');
$break_3_End = strtotime('03:30');
$break_4_Start = strtotime('06:00');
$break_4_End = strtotime('06:15');
if($finish > $start) {
$workTime = $finish - $start;
} else {
$end1 = strtotime('24:00');
$start1 = strtotime('00:00');
$starty = $end1 - $start;
$endy = $finish - $start1;
$workTime = $starty + $endy;
}
$break1 = $break_1_End - $break_1_Start;
$break2 = $break_2_End - $break_2_Start;
$break3 = $break_3_End - $break_3_Start;
$break4 = $break_4_End - $break_4_Start;
$workTime = $workTime - $break1 - $break2 - $break3 - $break4;
$workTime = $workTime/60;
$workTime = $workTime/60;
echo 'Work Time: '.$workTime;
?>
So, dieses Datum enthalten sowie die Zeit – RiggsFolly
Wie wäre es auch unter Berücksichtigung Datum. Sie können die Funktion time() verwenden, um die genauen Informationen in der XML-Datei zu speichern. –
@NoLand Wenn Sie kein Datum haben, können Sie meinen Beitrag verwenden. –