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で次のプロセスを実行します。

$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よりも小さいためです。この問題を解決する方法。

誰かが私を助けることができますか?

4

1 に答える 1

1

終了時間が開始時間より短い場合は、24時間を追加します(シフトが翌日に終了したためです)。

すでに計算$Total_shift_timeしているので、それが負かどうかを確認できます。

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

エラー...最初にシフト時間を計算した後、時間、分、秒の計算を開始する前に、必ずこれを行ってください...

于 2012-09-13T09:28:41.487 に答える