用php计算总工时

ipakzgxi  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(299)

我需要计算一个工人的确切工作时间,所以数据存储在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分钟(输出要求)。工作id 201301和工作id 401501都在同一时间(10分钟)内完成,工作id 401501都在25分钟内完成,因此工人的工作时间为(10+25)=35分钟。现在,工人用45分钟完成了另一项工作(工作id 601)。因此,工人的总工作时间为(10+25+45)80分钟。如何用php计算第n个数据?

c9qzyr3d

c9qzyr3d1#

如果你有这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;
}

然而,挖出它们并计算平均值,则是另一回事。但是如果您提供足够的数据(同一个worker和多个worker的多行数据),则可以提供更多帮助。
更新:在你更新了主要问题中的数据之后,数据从何而来变得更加清晰,我认为这才是你真正需要的。

<?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分组,您就无法确定时间量是否正确。i、 e读取数据作业需要10分钟,保存数据作业需要10分钟,但其中一个被忽略,因为需要“已知”的分钟数。我认为按时间分组是不安全的。

相关问题