需求举例,设置每张图的展示时间段,设置完成后,后面再设置别的图的展示时间段时,要判断前面的设置,不能在同一时间段展示2张图。
数据库字段
id,start_time,end_time,extra
判断逻辑(不漏判,不误杀)
1: 起始值在不在时间范围内。
2: 结束值在不在时间范围内。
3:已存在的时间范围在不在新的时间范围内(如果用户的起始值小于起始值,用户的结束值大于结束值,就囊括了前面的范围,还是重复了)
具体实现代码
//校验时间是否被占用
public function checkTime($aTime){
//查询到当前数据库设置的所有时间
$category = DB::table('img')->get(['start_time', 'end_time'])->toArray();//从数据库取出数据
$aCategory = $this->objToArr($category);//自定义的数据对象转数组方法,方便遍历,这里也可以不转,foreach里用对象的方法取就行
$aTime['start_time'] = strtotime($aTime['start_time']);
$aTime['end_time'] = strtotime($aTime['end_time']);
foreach ($aCategory as $v){
$start_time = strtotime($v['start_time']);
$end_time = strtotime($v['end_time']);
//起始值在时间范围内
if($aTime['start_time'] >= $start_time && $aTime['start_time'] <= $end_time){
return false;
}
//结束值在时间范围内
if($aTime['end_time'] >= $start_time && $aTime['end_time'] <= $end_time){
return false;
}
//时间范围值超出当前的时间范围
if($aTime['start_time'] < $start_time && $aTime['end_time'] > $end_time){
return false;
}
}
return true;
}
另一种思路
就是说,比如0-24点。 如果 [3点- 4点],[8点 - 10点]已经被占用了,成为了非法时间段。那就有[0点 - 3点],[4点 - 8点],[10点 - 24点]这三个时间段是合法的可以用的.有了[0点 - 3点],[4点 - 8点],[10点 - 24点]这三个合法时间段,遍历一下,看起始时间在哪个时间段内。比如,如果在 [4点 - 8点] 时间段内,那结束时间也得在这个时间段内,那才能是合法的时间段。
方法不是一成不变,不同的写法都有不同的业务场景。
enjoy it!
网友评论