/** * 获取日期之间的差数 */ function prDates($start,$end,$type='+1 day'){ // 两个日期之间的所有日期 $dt_start = strtotime($start); $dt_end = strtotime($end); $arr = []; while ($dt_start<=$dt_end){ $arr[]= date('Y-m-d',$dt_start); $dt_start = strtotime($type,$dt_start); } return $arr; } /** * 获得开始日期和结束日期 周时段 * @param $start_date * @param $end_date * @return array */ function prWeek($start_date,$end_date) { if(!$start_date || !$end_date) { return []; } $temp = $start_date; $week_arr = []; $end_time = strtotime($end_date); do{ $start_time = strtotime($start_date); $next_day = date("Y-m-d",strtotime("+1 day",$start_time)); if (date('w',$start_time) === '0') { $week_arr[] = $temp . '~' . $start_date; $temp = $next_day; } $start_date = $next_day; }while( $start_time < $end_time); if (date('w',$end_time) !== '0') { $week_arr[] = $temp . '~' . $end_date; } return $week_arr; } /** * 获取月时段 * * @param string $start_date * @param string $end_date * @return array */ function prMonths($start_date='',$end_date='') { if(!$start_date || !$end_date) { return []; } $temp_date = $start_date; $month_arr = []; $end_time = strtotime($end_date); do { $start_date = date('Y-m-d', strtotime("$start_date +1 month -1 day")); $start_time = strtotime($start_date); if($end_time<$start_time) { $month_arr[] = $temp_date . '~' . $end_date; break; } else { $month_arr[] = $temp_date . '~' . $start_date; } $temp_date = $start_date = date('Y-m-d', strtotime("+1 day",$start_time)); }while($start_time < $end_time); return $month_arr; } /** * 获取季度时段 * * @param string $start_date * @param string $end_date * @return array */ function prQuarter($start_date='',$end_date='') { $end_time = strtotime($end_date); $temp_date = $start_date; $quarter_arr = []; while(($start_time = strtotime($start_date))<$end_time) { $season = ceil((date('n',$start_time))/3); $start_quarter = date('Y-m-d', mktime(0, 0, 0,$season*3-3+1,1,date('Y',$start_time))); $end_quarter = date('Y-m-d', mktime(23,59,59,$season*3,date('t',mktime(0, 0 , 0,$season*3,1,date("Y",$start_time))),date('Y',$start_time))); $end_quarter_time = strtotime($end_quarter); $start_date = date('Y-m-d', strtotime("+1 day",$end_quarter_time)); if($end_quarter_time>$end_time) { $quarter_arr[] = $start_quarter.'~'.$end_date; break; } elseif(strtotime($start_quarter)<strtotime($temp_date)){ $quarter_arr[] = $temp_date.'~'.$end_quarter; } else { $quarter_arr[] = $start_quarter.'~'.$end_quarter; } } return $quarter_arr; } /** * 获取年时段 * * @param string $start_date * @param string $end_date * @return array */ function prYears($start_date='',$end_date='') { if(!$start_date || !$end_date) { return []; } $temp_date = $start_date; $year_arr = []; $end_time = strtotime($end_date); while(($start_time=strtotime($start_date))<$end_time) { $start_date = date('Y-12-01',$start_time); $start_date = date('Y-m-d', strtotime("$start_date +1 month -1 day")); if($end_time<$start_time) { $year_arr[] = $temp_date . '~' . $end_date; break; } else { $year_arr[] = $temp_date . '~' . $start_date; } $temp_date = $start_date = date('Y-m-d', strtotime("$start_date +1 day")); } return $year_arr; }