以24小时为例,PHP根据开始时间和结束时间,检测时间段是否被占用

需求:轮播图管理,24小时内有多张轮播图,每张轮播图可以播放一个时间段,单位为小时hour。为避免冲突,在设置轮播图的播放时间段时,要校验所设置时间段是否有其他轮播图占用。表字段:id,start_hour,end_hour,img_url.难点就是涉及到时间段的加减

####空间换时间

//校验时间是否被占用
    public function checkTime($aTime){
          //定义一个24个元素的数组标识24小时,每个元素标识当前到下一个小时的时间段
        $aData = range(0,23);
        //查询到当前数据库被占用的所有时间,伪代码
        (array) $aCategory = DB::table('img')->get(['start_hour', 'end_hour'])->get();

        foreach ($aCategory as $v){
            //-1是因为时间是范围,我在这里给每个范围标识了一个key,比如key 0代表0点到1点,key12代表12-13点,然后用key做计算
            $aData = array_diff($aData,range($v['start_hour'],$v['end_hour']-1));//$aData为剩余可选的时间
        }
        
        $bData = range($aTime['start_hour'],$aTime['end_hour']);//$bData为当前选的时间
        //如果bData的元素出现aData中没有的数据(即当前选择时间有超出可选时间段的),返回报错
        $diffData = array_diff($bData,$aData);
        if(!empty($diffData)){
            return false;
        }
        return true;
    }
    //检查1到2点之间的时间有没有被占用
    var_dump(checkTime(['start_hour'=>1,'end_hour']=>2));

打赏作者

发表评论

电子邮件地址不会被公开。