如何在php中找到两个时间间隔的持续时间?

时间:2012-09-13 09:26:21

标签: php

我有一个以下格式的Mysql表shift_def。

+-------------------------------------------------------------------------------+
|  id   |   name   |   start_time   |    end_time   |   description   |  break  |
|-------------------------------------------------------------------------------|
|  101  | Shift1   |    01:03:55    |    06:00:55   |  Shift 1        |   1     |
|-------------------------------------------------------------------------------|
|  102  | Shift2   |    06:03:55    |    01:00:55   |  Shift 2        |   3     |
+-------------------------------------------------------------------------------+

查找总班次。我在我的php中执行以下过程。

$shift_time = mysql_query("select start_time, end_time from rpt_shift_def where name ='Shif1'")or die(mysql_error());
        while ($row = mysql_fetch_assoc($shift_time)) 
        {
           $Total_shift_time = strtotime($row['end_time']) - strtotime($row['start_time']);
            $hours=floor($Total_shift_time/3600);
            $Total_shift_time-=$hours*3600;
            $minutes=floor($Total_shift_time/60);
            $Total_shift_time-=$minutes*60;
            $seconds=$Total_shift_time;
            $Total_shift_time=$hours.":".$minutes.":".$seconds;*/                                                                                                                                                                                                                                                                                                                                                                            
            echo "$Total_shift_time";
            echo "</br>";
        }

输出

4:57:0

当我对第2档尝试相同时,预期的输出是

18:57:0

但输出是

-6:57:0

负值是因为班次2的end_time小于start_time。 如何解决这个问题。

任何人都可以帮助我。

1 个答案:

答案 0 :(得分:1)

如果结束时间小于开始时间,请添加24小时(原因是换班在第二天结束)。

由于您已经计算了$Total_shift_time,因此您只需检查是否为负数。

if( $Total_shift_time < 0 ) {
    $Total_shift_time += 86400;  // Number of seconds in a day
}

错误......确保在首次计算班次时间之后以及开始计算小时,分钟和秒钟之前执行此操作...