我有一个以下格式的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。 如何解决这个问题。
任何人都可以帮助我。
答案 0 :(得分:1)
如果结束时间小于开始时间,请添加24小时(原因是换班在第二天结束)。
由于您已经计算了$Total_shift_time
,因此您只需检查是否为负数。
if( $Total_shift_time < 0 ) {
$Total_shift_time += 86400; // Number of seconds in a day
}
错误......确保在首次计算班次时间之后以及开始计算小时,分钟和秒钟之前执行此操作...