在一定时间内时段0-7 或时段7-18 出现了多少次,并计算出每个段的秒数,如何得知。

例如 时间
1.2019-08-09 14:00:13 到 2019-08-09 21:00:13

2.判断时段0点到7点 7点到18点 在这段时间内 出现的秒数

如何精准实现,求告知思路,谢谢

/*
     * i don't know what i'm writing
     * try it maybe it will work
     * */
public function tryIt()
    {
        $start = 0;  //开始时段
        $end = 7;  //结束时段  为0 要处理成24
        $tmp_1 = strtotime('2019-08-09 14:00:13');
        $tmp_2 = strtotime('2019-08-09 21:00:13');
        $stop = true;
        $arr2 = [];
        while($stop)
        {
            $arr2[] = date('Y-m-d H:00:00',$tmp_1);
            if( ( $tmp_1 += 3600 ) >= $tmp_2)
            {
                $stop = false;
            }
        }
        $seconds = 0;
        foreach($arr2 as $k2 => $v2)
        {
            $v2 = strtotime($v2);
            $that = (int) date("H",$v2);
            if( $that >= $start && $that < $end )
            {
                if($k2 == 0)
                {
                    var_dump("开始---".$this->startTime);
                    var_dump("节点开始---".date('Y-m-d H:i:s',$v2));
                    var_dump("相差秒数---".(strtotime($this->startTime) - $v2));
                    //第一次特殊处理 因为可能不是整点开始的
                    $this_seconds =  3600 - ( strtotime($this->startTime) - $v2 );
                }else if($k2 == (count($arr2)-1) ) {
                    //最后一个也特殊处理 因为有可能不够一小时
                    $this_seconds = strtotime($this->endTime) - $v2;

                }else{
                    $this_seconds = 3600;
                }

                $seconds += $this_seconds;

            }
        }

        //so ! it's really work O(∩_∩)O
        dump($seconds);
    }