显示2次正确的差异

时间:2016-07-25 15:09:53

标签: php

我有一个问题,让工作时间显示正确的工作时间。

以下是我正在使用的代码:

<?php while($row = $approvedTimes->fetch()){ ?>
    <tr>
      <td><?php echo $row['userFirst'] . " ". $row['userLast'];  ?></td>
      <td><?php echo $row['companyName'];  ?></td>
      <td><?php echo date('Y-M-d',strtotime($row['timeDate']));  ?></td>
      <td><?php echo date("h:i a",strtotime($row['timeStart'])); $start = $row['timeStart'];  ?></td>
      <td><?php echo date("h:i a",strtotime($row['timeEnd'])); $end = $row['timeEnd'] ;  ?></td>
      <td><?php echo $row['timeBreak'] . " min."; $break = $row['timeBreak']; ?></td>
      <td><?php $hours = strtotime($end) - strtotime($start) -($break*60) ; echo  number_format($hours/3600,2, '.', '') . " hours"; ?></td>
    </tr>
    <?php } ?>

如果您发现第二条记录输出的时间为-17.50小时,但工作时间应为6.5小时。我认为问题在于它在几秒钟内看到两次,但我不确定如何能够根据开始和结束时间更改它以显示正确的工作时间。

这是我输出的表格:

Time Table with error

3 个答案:

答案 0 :(得分:0)

没有简短的答案,所以,你必须使用这样的东西:

$hours = strtotime($row['timeEndDate']." ".$row['timeEnd']) 
- strtotime($row['timeStartDate']." ".$row['timeStart']) 
-($break*60);

但你必须收集结束时间date

正如 Lars Stegelitz 所评论的:你的时期可能是一夜之间!

因此,在进行任何更改之前,请考虑将timeStarttimeEnd收集为完整日期时间而不是仅限时间。

如果你想用当前的表做这个,你必须做一些额外的检查:开始时间是否大于结束时间然后对此作出反应(strtotime()加上白天)

How do I find the hour difference between two dates in PHP?

Calculate number of hours between 2 dates in PHP

答案 1 :(得分:0)

您可以使用DateTime()DateInterval类来实现这一目标,而无需进行长时间的手动计算,如下所示。

注意:这假定$row['timeStart']$row['timeEnd']是有效的日期格式字符串,例如2016-07-23 08:15:30以及$row['timeBreak']数字 分钟休息说:(例如30或60)。
    <?php while($row = $approvedTimes->fetch()){ ?>
        <tr>
            <?php
                $start      = new DateTime($row['timeStart']);
                $end        = new DateTime($row['timeEnd']);
                $breakTime  = new DateInterval('PT'. $row['timeBreak'] .'M');

                // SUBTRACT THE BREAK TIME (IN MINUTES) FROM THE WORK-END TIME: $end  
                $end        = $end->sub($breakTime);

                // GET THE DIFFERENCE BETWEEN WORK-START TIME:$start & WORK-END TIME: $end  
                $timeDiff   = $end->diff($start);

                // BUILD A STRING TO REPRESENT THE DIFFERENCE USING SOME DateInterval METHODS.  
                $strDiff    = $timeDiff->h . " Hours, " . $timeDiff->i . " Minutes &amp; " . $timeDiff->s . " Seconds";
            ?>
            <td><?php echo $row['userFirst'] . " ". $row['userLast'];  ?></td>
            <td><?php echo $row['companyName'];  ?></td>
            <td><?php echo date('Y-M-d', strtotime($row['timeDate']));  ?></td>
            <td><?php echo date("h:i a", strtotime($row['timeStart']));  ?></td>
            <td><?php echo date("h:i a", strtotime($row['timeEnd']));   ?></td>
            <td><?php echo $row['timeBreak'] . " min."; ?></td>
            <td><?php echo $strDiff; /* ECHO OUT THE TOTAL HOURS WORKED...*/  ?></td>
        </tr>
    <?php } ?>

答案 2 :(得分:-1)

从彼此中减去完整的时间戳,以便strtotime看到日期更改。