Php 每天不重叠的分钟数

Php 每天不重叠的分钟数,php,mysql,Php,Mysql,我一直在想方设法解决这个问题 我需要知道一天中有多少分钟是由一名员工独自在店里工作的 以下是daynumber=0星期一的数据: 对于这一天,staffid=32的员工从11:00到11:05单独在店内 到目前为止,我所做的只是添加所有的开始时间,但基本上我所想的是,如果我有任何方法知道一名员工是孤独的,我可以计算出索引和下一个索引之间的时间 for($i=0; $i<count($results); $i++){ if(isset($results[$i+1])){

我一直在想方设法解决这个问题

我需要知道一天中有多少分钟是由一名员工独自在店里工作的

以下是daynumber=0星期一的数据:

对于这一天,staffid=32的员工从11:00到11:05单独在店内

到目前为止,我所做的只是添加所有的开始时间,但基本上我所想的是,如果我有任何方法知道一名员工是孤独的,我可以计算出索引和下一个索引之间的时间

for($i=0; $i<count($results); $i++){
    if(isset($results[$i+1])){
        if($results[$i]->starttime < $results[$i+1]->starttime)
            $start = strtotime($results[$i]->starttime);
            $end = strtotime($results[$i+1]->endtime);
            $minutes +=  idate('i', $end - $start);
        }
    }
}
有什么想法吗

更新1: 我做到这一点,但仍然没有运气

    for($i=0; $i<count($results); $i++){
        if(isset($results[$i+1])){
            $StartDate1 = strtotime($results[$i]->starttime);
            $EndDate1 = strtotime($results[$i]->endtime);
            $StartDate2 = strtotime($results[$i+1]->starttime);
            $EndDate2 = strtotime($results[$i+1]->endtime);

            if(($StartDate1 <=  $EndDate2) && ($EndDate1 >= $StartDate2)){
                $StartDate1 = idate('i', $StartDate1);
                $EndDate1 = idate('i', $EndDate1);
                $StartDate2 = idate('i', $StartDate2);
                $EndDate2 = idate('i', $EndDate2);

                $a = abs($EndDate1 - $StartDate1);
                $b= abs($EndDate1 - $StartDate2);
                $c = abs($EndDate2 - $StartDate2);
                $d = abs($EndDate2 - $StartDate1);

                $minutes += min([$a,$b,$c,$d]);
            }
        }
    }

我做错了什么?

这里有一个想法,使用一个实用表——在本例中是一个0-9的整数表。 一些人不喜欢工具表,但我喜欢它们,因为它们意味着更少的打字。 您始终可以使用一系列联合来替换该表

这是所有的日子。稍后我可能会对其进行修改,以显示如何筛选特定的一天

SELECT * FROM ints;
+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
+---+

SELECT SEC_TO_TIME((i4.i*1000+i3.i*100+i2.i*10+i1.i)*60) n 
  FROM ints i1 
  JOIN ints i2 
  JOIN ints i3 
  JOIN ints i4 
  JOIN 
     ( SELECT daynumber
            , MIN(starttime) starttime
            , MAX(CASE WHEN endtime < starttime THEN SEC_TO_TIME(TIME_TO_SEC('24:00:00')+TIME_TO_SEC(endtime)) ELSE endtime END) endtime 
         FROM my_table 
        GROUP 
           BY daynumber
     ) x 
    ON SEC_TO_TIME((i4.i*1000+i3.i*100+i2.i*10+i1.i)*60) BETWEEN x.starttime AND x.endtime
  JOIN my_table y
    ON SEC_TO_TIME((i4.i*1000+i3.i*100+i2.i*10+i1.i)*60) BETWEEN y.starttime AND CASE WHEN y.endtime < y.starttime THEN SEC_TO_TIME(TIME_TO_SEC('24:00:00')+TIME_TO_SEC(y.endtime)) ELSE y.endtime END
 GROUP
    BY n HAVING COUNT(*) = 1;

The number of lone minutes is equal to the number of rows in this result.

这里有一个想法,使用一个实用表——在本例中是一个0-9的整数表。 一些人不喜欢工具表,但我喜欢它们,因为它们意味着更少的打字。 您始终可以使用一系列联合来替换该表

这是所有的日子。稍后我可能会对其进行修改,以显示如何筛选特定的一天

SELECT * FROM ints;
+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
+---+

SELECT SEC_TO_TIME((i4.i*1000+i3.i*100+i2.i*10+i1.i)*60) n 
  FROM ints i1 
  JOIN ints i2 
  JOIN ints i3 
  JOIN ints i4 
  JOIN 
     ( SELECT daynumber
            , MIN(starttime) starttime
            , MAX(CASE WHEN endtime < starttime THEN SEC_TO_TIME(TIME_TO_SEC('24:00:00')+TIME_TO_SEC(endtime)) ELSE endtime END) endtime 
         FROM my_table 
        GROUP 
           BY daynumber
     ) x 
    ON SEC_TO_TIME((i4.i*1000+i3.i*100+i2.i*10+i1.i)*60) BETWEEN x.starttime AND x.endtime
  JOIN my_table y
    ON SEC_TO_TIME((i4.i*1000+i3.i*100+i2.i*10+i1.i)*60) BETWEEN y.starttime AND CASE WHEN y.endtime < y.starttime THEN SEC_TO_TIME(TIME_TO_SEC('24:00:00')+TIME_TO_SEC(y.endtime)) ELSE y.endtime END
 GROUP
    BY n HAVING COUNT(*) = 1;

The number of lone minutes is equal to the number of rows in this result.

我们可能会尝试帮助修复您编写的代码。我们不是来为您编写代码或设计系统的。那是你的工作。24小时模式的时钟?php?这里有些东西可能会有所帮助:请参阅:您可以参考旧的堆栈溢出帖子,以获得答案:我们可能会尝试帮助修复您编写的代码。我们不是来为您编写代码或设计系统的。那是你的工作。24小时模式的时钟?php?这里有些东西可能会有所帮助:请看:您可以参考旧的堆栈溢出帖子来获得答案:感谢@草莓的回复,但我正在寻找一个php解决方案。我还在这上面,如果我找到答案,我会把它贴出来。谢谢感谢您的回复@草莓,但我正在寻找一个PHP解决方案。我还在这上面,如果我找到答案,我会把它贴出来。谢谢