当time2小于time1 php时的小时数之间的差异

时间:2015-11-12 09:19:04

标签: php mysql

我有一个应用程序,根据员工在两个日期之间工作的额外小时数来计算产品负责人的加班时间。 如果结束时间大于开始时间,那么查询我的工作完美,但不是相反。 我有以下代码:

$query = "SELECT Y.Name_Of_ThePL, SEC_TO_TIME(SUM(TIME_TO_SEC(X.EndTime) - TIME_TO_SEC(X.StartTime))) AS SUM FROM X, Y WHERE X.ID_PL = Y.ID_PL and 
    Data >= '$datepicker' AND Data <= '$datepicker1' and Y.ID_PL = $idPL GROUP BY Y.Name_Of_ThePL";

    $result = mysql_query($query) or die(mysql_error());

    while($rowcount = mysql_fetch_array($result)){
        $sum = $rowcount['EndTime'] - $rowcount['StartTime'];
        $count += abs($sum);
    }

想象一下,我的开始时间是22:00,结束时间是06:00,在之前的方法中它返回16,但实际上结果是8。 我怎么处理这个?有什么建议!?

P.S:是的,我会把它与PDO一起使用。

感谢你的注意力。

3 个答案:

答案 0 :(得分:1)

想到的最简单的解决方案(未经测试):

wampmanager->PHP->php.ini

答案 1 :(得分:1)

试试这个......

  $dtime="22:00";
 $atime="06:00";
 $nextDay=$dtime>$atime?1:0;
 $dep=EXPLODE(':',$dtime);
 $arr=EXPLODE(':',$atime);
 $diff=ABS(MKTIME($dep[0],$dep[1],0,DATE('n'),DATE('j'),DATE('y'))-MKTIME($arr[0],$arr[1],0,DATE('n'),DATE('j')+$nextDay,DATE('y')));
 $hours=FLOOR($diff/(60*60));
 $mins=FLOOR(($diff-($hours*60*60))/(60));
 $secs=FLOOR(($diff-(($hours*60*60)+($mins*60))));
 IF(STRLEN($hours)<2){$hours="0".$hours;}
 IF(STRLEN($mins)<2){$mins="0".$mins;}
 IF(STRLEN($secs)<2){$secs="0".$secs;}
 echo $hours.':'.$mins.':'.$secs;

输出:08:00:00

演示:https://eval.in/467530

更新:

$sum=array();
while($rowcount = mysql_fetch_array($result)){
    $dtime=$rowcount['StartTime'];
     $atime=$rowcount['EndTime'];
     $nextDay=$dtime>$atime?1:0;
     $dep=EXPLODE(':',$dtime);
     $arr=EXPLODE(':',$atime);
     $diff=ABS(MKTIME($dep[0],$dep[1],0,DATE('n'),DATE('j'),DATE('y'))-MKTIME($arr[0],$arr[1],0,DATE('n'),DATE('j')+$nextDay,DATE('y')));
     $hours=FLOOR($diff/(60*60));
     $mins=FLOOR(($diff-($hours*60*60))/(60));
     $secs=FLOOR(($diff-(($hours*60*60)+($mins*60))));
     IF(STRLEN($hours)<2){$hours="0".$hours;}
     IF(STRLEN($mins)<2){$mins="0".$mins;}
     IF(STRLEN($secs)<2){$secs="0".$secs;}
     $sum[]=$hours;
}
echo array_sum($sum);

输出:16:00

答案 2 :(得分:1)

使用SQL Time不同:

$I->seeResponseContainsJson(['data' => [
    'first_name' => 'Test'
]]);

您可以使用上述代码申请小时 仅供参考,这些方法可以返回减去结果。