//开始时间 ~ 结束时间
$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点必定是同一天
}
}