我需要计算一个工人的确切工作时间,因此数据已经存储在mysql数据库表中,例如
Date work-id Start-Time Close-Time
2018-07-14 201 6:50 PM 7:00 PM
2018-07-14 301 6:50 PM 7:00 PM
2018-07-14 401 6:50 PM 7:25 PM
2018-07-14 501 6:55 PM 7:15 PM
2018-07-14 601 8:00 PM 8:45 PM
我需要类似10 + 25 + 45 = 80分钟的输出。
因此平均工作时间为75分钟。但是这个输出是错误的。我需要类似10 + 25 + 45 = 80分钟的输出(需要输出)。工号201,301都在同一时间(10分钟)完成,而工号401,501都在25分钟内完成,因此工人的工作时间为(10 + 25)= 35分钟。 现在,该工人用了45分钟完成了另一项工作(工作编号601)。 因此,工人的总工作时间将为(10 + 25 + 45)80分钟。 在PHP中如何计算第N个数据?
答案 0 :(得分:0)
如果您有这4件事,则可以使用如下代码来计算工作时间:
<?php
$worktimes = [
['2018-07-14','201','6.50 PM','7.00 PM'],
['2018-07-14','301','6.50 PM','7.00 PM'],
['2018-07-14','401','6.50 PM','7.25 PM'],
['2018-07-14','501','6.55 PM','7.15 PM']
];
foreach($worktimes as $worktime){
$workerId = $worktime[1];
$start = strtotime($worktime[0].' '.$worktime[2]);
$end = strtotime($worktime[0].' '.$worktime[3]);
$timeworkedInSeconds = $end-$start;
$timeworkedInMinutes = $timeworkedInSeconds/60;
$timeworkedByWorker[$workerId][]=$timeworkedInMinutes;
}
foreach($timeworkedByWorker as $workerId => $times){
echo join('+',$times).' = '.array_sum($times).PHP_EOL;
}
但是,将它们增加并计算平均值是另一回事。但是,如果您提供足够的数据(同一工作人员的多行和多个工作人员),则可以提供更多帮助。
已更新: 在您更新了主要问题中的数据之后,就更加清楚了数据的来源,我认为这正是您真正需要的。
<?php
$worktimes = [
['2018-07-14', '201', '6:50 PM', '7:00 PM'],
['2018-07-14', '301', '6:50 PM', '7:00 PM'],
['2018-07-14', '401', '6:50 PM', '7:25 PM'],
['2018-07-14', '501', '6:55 PM', '7:15 PM'],
['2018-07-14', '601', '8:00 PM', '8:45 PM'],
];
foreach($worktimes as $worktime){
$start = strtotime($worktime[0].' '.$worktime[2]);
$end = strtotime($worktime[0].' '.$worktime[3]);
$timeInSeconds = $end-$start;
$timeInMinutes = $timeInSeconds/60;
$workTimesInMinutes[]=$timeInMinutes;
}
$workTimesInMinutes = array_unique($workTimesInMinutes);
echo join('+',$workTimesInMinutes).' = '.array_sum($workTimesInMinutes).PHP_EOL;
但是请记住,您没有保证两个不同的工作花费了相同的时间,因此,如果没有对workerID进行分组,您将无法确定时间的正确性。也就是说,读取数据作业需要10分钟,保存数据作业需要10分钟,但是其中之一会被忽略,因为要花费“已经知道”的分钟数。我认为按时间分组是不安全的。