В настоящее время я столкнулся с проблемой в функции strtotime()
. Я готовлю расписание для своей работы, где пользователи могут вводить свое рабочее время, а сценарий получает все переменные из файла xml и делает pdf ... пока все работает гладко, но при входе в ночную смену возникает странная проблема.
Поэтому я разработал пример отладки, в котором пользователь начинает свою работу в 21:00 (21:00) и заканчивает ее в 06:00 (6:00). Я хочу получить точное введенное рабочее время, поэтому я strtotime()
каждый раз сравниваю их.
Я предполагаю, что проблема в том, что время начала - день 1, а время окончания - день 2, но сценарий считает, что он все еще в день 1 ... Извините, но я не нашел для этого никакого решения, поэтому я надеюсь, что кто-то здесь может помочь меня.
Пример кода:
<?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<?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;
?>
Start = '06:00';
$break<?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;
?>
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<?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;
?>
End) - strtotime($break<?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;
?>
Start);
$workTime = $workTime - $break1 - $break2 - $break3 - $break4;
$workTime = $workTime / 60;
$workTime = $workTime / 60;
echo 'Work Time: '.$workTime;
?>
РЕДАКТИРОВАТЬ: нашел обходной путь, который работает на данный момент, но, возможно, у кого-то есть лучшее решение
Код:
<?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;
?>