PHP按日期按天对时间段进行分割

来源:互联网 发布:excel替代软件 编辑:程序博客网 时间:2024/05/22 00:39
        //开始时间 ~ 结束时间        $start_date=I('date_a');        $end_date=I('date_b');//        //如果为空,则从今天的0点为开始时间        if(!empty($start_date))            $start_date=date('Y-m-d H:i:s',strtotime($start_date));        else            $start_date=date('Y-m-d 00:00:00',time());//        //如果为空,则以明天的0点为结束时间(不存在24:00:00,只会有00:00:00)        if(!empty($end_date))            $end_date=date('Y-m-d H:i:s',strtotime($end_date));        else            $end_date=date('Y-m-d 00:00:00',strtotime('+1 day'));        //between 查询 要求必须是从低到高        if($start_date>$end_date)        {            $ttt=$start_date;            $start_date=$end_date;            $end_date=$ttt;        }elseif($start_date==$end_date){            echo '时间输入错误';die;        }        $time_s=strtotime($start_date);        $time_e=strtotime($end_date);        //生成中间时间点数组(时间戳格式、日期时间格式、日期序列)        $days_inline_array=array();        $times_inline_array=array();        $days_list=array();        //判断开始和结束时间是不是在同一天        $days_inline_array[0]=$start_date;        $times_inline_array[0]=$time_s;        if(            date('Y-m-d',$time_s)            ==date('Y-m-d',$time_e)        ){            $days_inline_array[1]=$end_date;            $times_inline_array[1]=$time_e;            $days_list[]=date('Y-m-d',$time_s);        }        else        {            /**             * A.取开始时间的第二天凌晨0点             * B.用结束时间减去A             * C.用B除86400取商,取余             * D.用A按C的商循环+86400,取得分割时间点,如果C没有余数,则最后一个时间点与循环最后一个时间点一致             */            $A_temp=date('Y-m-d 00:00:00',$time_s+86400);            $A=strtotime($A_temp);            $B=$time_e-$A;            $C_quotient=floor($B/86400);    //商舍去法取整            $C_remainder=fmod($B,86400);               //余数            $days_inline_array[1]=$A_temp;            $times_inline_array[1]=$A;            $days_list[]=date('Y-m-d',$A);            for($increase_time=$A,$c_count_t=1;$c_count_t<=$C_quotient;$c_count_t++)            {                $increase_time+=86400;                $days_inline_array[]=date('Y-m-d H:i:s',$increase_time);                $times_inline_array[]=$increase_time;                $days_list[]=date('Y-m-d',$increase_time);            }            //如果有余数,则最后一个时间点大于循环最后一个时间点,但在同一天            if($C_remainder)            {                $days_inline_array[]=$end_date;                $times_inline_array[]=$time_e;                //这里不再添加 $days_list,因为余数和最后一个凌晨0点必定是同一天            }        }