Привет, я всего лишь начинающий программист, но сейчас я создаю приложение, которое получает общее количество часов работы.
Здесь у меня есть массив время_начало, в котором порог для входа клиента такой же, как и для время_конец.
журналы здесь, где человек регистрируется.
$time_start = [
[0] => '22:00:00',
[1] => '03:00:00',
];
$time_end = [
[0] => '02:00:00',
[1] => '08:00:00',
];
$logs = [
[0] => '2019-07-09 22:00:00',
[1] => '2019-07-10 02:00:00',
[2] => '2019-07-10 03:00:00',
[3] => '2019-07-10 08:00:00',
];
Поэтому я пытаюсь получить сумму их часов в ночную смену, у которой другая дата.
Пытаюсь вставить:
foreach( $logs as $check_time ){
$attendance_date_time = date("Y-m-d",strtotime($check_time));
$time_starts = date('Y-m-d H:i:s', strtotime("$attendance_date_time $time_start"));
$time_ends = date('Y-m-d H:i:s', strtotime("$attendance_date_time $time_end"));
if ( $check_time >= $time_starts && $check_time <= $time_ends )
{
$time[] = $check_time;
}else{
$time = null
}
}
Предположительно, я получу все журналы, потому что они находятся между time_start и time_end, и сохраню их в $time
И суммируя время, которое я получаю.
Поскольку я новичок в php, есть ли у них самая простая идея получить общее количество рабочих часов? Потому что я получаю нулевое значение, потому что полученное time_end было датой check_in.
да. В приведенных логах результат будет 9 часов
Как это будет 9 часов, можете объяснить? Потому что я вижу его 5 часов!
2019-09-09 22:00 до 2019-09-10 02:00 равно 4hours. 2019-07-10 03:00:00 до 2019-07-10 08:00:00 равно 5hoursПоскольку журналы $ находятся между time_in и out, они добавляются к массиву $time. И добавьте каждый массив. равно 9 часам






Вот ваш фрагмент,
$time_start = [
0 => '22:00:00',
1 => '03:00:00',
];
$time_end = [
0 => '02:00:00',
1 => '08:00:00',
];
$logs = [
0 => '2019-07-09 22:00:00',
1 => '2019-07-10 02:00:00',
2 => '2019-07-10 03:00:00',
3 => '2019-07-10 08:00:00',
];
$time = [];
$diff = 0;
for ($j = 0; $j < count($logs); $j = $j + 2) {
$attendance_start = date("Y-m-d", strtotime($logs[$j]));
$attendance_end = date("Y-m-d", strtotime($logs[$j + 1]));
for ($i = 0; $i < count($time_start); $i++) {
$time_starts = date('Y-m-d H:i:s', strtotime("$attendance_start " . $time_start[$i] . ""));
$time_ends = date('Y-m-d H:i:s', strtotime("$attendance_end " . $time_end[$i] . ""));
if ($logs[$j] >= $time_starts && $logs[$j + 1] <= $time_ends) {
array_push($time, $logs[$j], $logs[$j + 1]);
// calculating diff for two alternate days
$diff += (round((strtotime($logs[$j + 1]) - strtotime($logs[$j])) / 3600, 1));
break;
}
}
}
echo $diff . " Hours";die;
Выход:-
9 Hours
2019-09-09 22:00 до 2019-09-10 02:00 равно 4hours. 2019-07-10 03:00:00 to 2019-07-10 08:00:00 равно 5hours У нас есть даты 2019-09-09 и 2019-09-10
@ElliotA Я внес изменения в соответствии с вашим требованием. Пожалуйста, посмотрите
Спасибо. связь, если вы можете помочь мне с этим?
Цикл for - самый простой способ сделать это
$time_start = [
'22:00:00',
'03:00:00',
];
$time_end = [
'02:00:00',
'08:00:00',
];
$logs = [
'2019-07-09 22:00:00',
'2019-07-10 02:00:00',
'2019-07-10 03:00:00',
'2019-07-10 08:00:00',
];
$totalDiff = 0;
for($i =0 ; $i < count($logs); $i = $i + 2)
{
$startDate = strtotime($logs[$i]);
$endDate = strtotime($logs[$i+1]);
$diff = $endDate-$startDate;
$totalDiff += $diff;
}
$hourDiff = $totalDiff / 3600;
echo $hourDiff . ' hours';
суммирование означает, что именно общее количество часов между этими датами?