2

我有以下格式的 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.ini 中执行以下过程。

$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

当我为 shift 2 尝试相同的操作时,预期的输出是

18:57:0

但输出是

-6:57:0

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

谁能帮我吗。

4

1 回答 1

1

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

由于您已经计算过$Total_shift_time,您可以检查它是否为负数。

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

Err... 确保在您第一次计算轮班时间之后和开始计算小时、分钟和秒之前执行此操作...

于 2012-09-13T09:28:41.487 回答