Я пытаюсь подсчитать общее количество людей на основе того, когда они in
, break
, resume
и out
.
У меня есть эти данные:
$data[0]['type'] = 'in';
$data[0]['created_at'] = '2019-02-01 08:01:52';
$data[1]['type'] = 'break';
$data[1]['created_at'] = '2019-02-01 12:00:40';
$data[2]['type'] = 'resume';
$data[2]['created_at'] = '2019-02-01 13:00:39';
$data[3]['type'] = 'break';
$data[3]['created_at'] = '2019-02-01 14:29:21';
$data[4]['type'] = 'resume';
$data[4]['created_at'] = '2019-02-01 14:29:50';
$data[5]['type'] = 'break';
$data[5]['created_at'] = '2019-02-01 14:29:53';
$data[6]['type'] = 'resume';
$data[6]['created_at'] = '2019-02-01 14:30:00';
$data[7]['type'] = 'break';
$data[7]['created_at'] = '2019-02-01 14:30:09';
$data[8]['type'] = 'resume';
$data[8]['created_at'] = '2019-02-01 14:30:12';
$data[9]['type'] = 'out';
$data[9]['created_at'] = '2019-02-01 18:01:51';
$hours = 0;
$minutes = 0;
foreach($data as $key => $d){
$d['created_at'] = str_replace(" ","T",$d['created_at']);
if($d['type'] == 'in' || $d['type'] == 'resume'){
$workingTime = new DateTime($d['created_at']);
}
if($d['type'] == 'break' || $d['type'] == 'out'){
$date2 = new DateTime($d['created_at']);
$diff = $date2->diff($workingTime);
$tempHours = $diff->h;
$tempHours = $tempHours + ($diff->days*24);
$hours += $tempHours;
$tempMin = $diff->i;
$minutes += $tempMin;
}
}
if($minutes == 60){
$hours += 1;
echo $hours. " hours and 00 minutes";
}else if($minutes > 60){
$hours = $hours + floor($minutes/60);
$minutes = $minutes % 60;
echo $hours. " hours and ".$minutes." minutes";
}else{
echo $hours. " hours and ".$minutes." minutes";
}
Сумма, которую я получаю: 8 hours and 57 minutes
, , тогда как правильный ответ должен быть 08 hour and 59 minutes and 21 seconds
.
Я думаю, что причина, по которой я не получаю правильныйответ, потому что в моем коде я не включаю секунды в расчет.
Может ли кто-нибудь помочь мне получить правильный ответ, включив секунды в расчет.
Ваша помощь будет в значительной степениоценили!Спасибо.
Кстати, причина, по которой я знаю, что правильный ответ - 08 hour and 59 minutes and 21 seconds
из-за этого сайта: https://www.calculator.net/time-calculator.html
Я получаю сумму разности всехэти:
$a = break - in
$b = break - resume
$c = out - resume
Then: $total_time = $a + $b + $c
Дайте мне знать, если это неясно.Спасибо.