计算在php中工作的总时数

时间:2018-08-09 06:10:22

标签: php mysql

我需要计算一个工人的确切工作时间,因此数据已经存储在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个数据?

1 个答案:

答案 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分钟,但是其中之一会被忽略,因为要花费“已经知道”的分钟数。我认为按时间分组是不安全的。