#需求是获取两个时间内 年周 、年季度、年半年的二级联动#
找了半天也找不到什么有用的信息 就自己简单写了一个 思路是先获取年的列表再去嵌套查询
根据前端VUE提供的格式嵌套
-
- public function getDate(){
- $leixing = Request::param('leixing');
- $larr = array('1','2','3','4');
- if(empty($leixing)){
- echo apireturn(201,'类型不正确','');die;
- }else{
- if(!in_array($leixing,$larr)){
- echo apireturn(201,'类型不正确','');die;
- }
- }
- $start = '2023-01-01';
- $start_time = strtotime($start);
- $end_time = time();
-
- $start_year = date('Y',$start_time);
- $end_year = date('Y',$end_time);
-
-
- $year_arr = array();
- if($start_year == $end_year){
- array_push($year_arr,$start_year);
- }else{
- //获取年份
- for($i=$end_year;$i>=$start_year;$i--){
- array_push($year_arr,(string)$i);
- }
- }
-
- $array = array();
- foreach ($year_arr as $k => $v){
-
- if($leixing == 1){
- $week_arr = array();
- //取周数
- if($end_year == $v){
- $endzhounum = date('W',time()+86400);
-
- if($start_year == $v){
- $startzhounum = intval(date('W',$start_time+86400));
- }else{
- $startzhounum = 1;
- }
-
- //获取周数
- for($i=$endzhounum;$i>=$startzhounum;$i--){
- array_push($week_arr,'第'.$i.'周');
- }
- }else{
- $year = $v."-01-01";
- $time = strtotime($year);
- $yearLastDay = strtotime("-1 day", strtotime("+1 year", $time));
-
- $endzhounum = date('W',$yearLastDay);
- if($start_year == $v){
- $startzhounum = date('W',$start_time+86400);
- }else{
- $startzhounum = 1;
- }
-
- //获取周数
- for($i=$endzhounum;$i>=$startzhounum;$i--){
- array_push($week_arr,'第'.$i.'周');
- }
- }
-
- $array[$v.'年'] = $week_arr;
-
- }else if($leixing == 2){
-
- $quarter_arr = array();
- //取周数
- if($end_year == $v){
- $endjinum = ceil(date('n',time()+86400)/3);
- if($start_year == $v){
- $startjinum = ceil(date('n',$start_time+86400)/3);
- }else{
- $startjinum = 1;
- }
-
- //获取周数
- for($i=$endjinum;$i>=$startjinum;$i--){
- array_push($quarter_arr,'第'.$i.'季度');
- }
- }else{
- $year = $v."-01-01";
- $time = strtotime($year);
- $yearLastDay = strtotime("-1 day", strtotime("+1 year", $time));
-
- $endjinum = ceil(date('n',$yearLastDay)/3);
- if($start_year == $v){
- $startjinum = ceil(date('n',$start_time+86400)/3);
- }else{
- $startjinum = 1;
- }
-
- //获取周数
- for($i=$endjinum;$i>=$startjinum;$i--){
- array_push($quarter_arr,'第'.$i.'季度');
- }
- }
-
- $array[$v.'年'] = $quarter_arr;
- }else if($leixing == 3){
-
- $banyear_arr = array();
- //取周数
- if($end_year == $v){
- $endjinum = ceil(date('n',time()+86400)/6);
- if($start_year == $v){
- $startjinum = ceil(date('n',$start_time+86400)/6);
- }else{
- $startjinum = 1;
- }
-
- //获取周数
- for($i=$endjinum;$i>=$startjinum;$i--){
- if($i == 1){
- array_push($banyear_arr,'上半年');
- }else{
- array_push($banyear_arr,'下半年');
- }
- }
- }else{
- $year = $v."-01-01";
- $time = strtotime($year);
- $yearLastDay = strtotime("-1 day", strtotime("+1 year", $time));
-
- $endjinum = ceil(date('n',$yearLastDay)/6);
- if($start_year == $v){
- $startjinum = ceil(date('n',$start_time+86400)/6);
- }else{
- $startjinum = 1;
- }
-
- //获取周数
- for($i=$endjinum;$i>=$startjinum;$i--){
- if($i == 1){
- array_push($banyear_arr,'上半年');
- }else{
- array_push($banyear_arr,'下半年');
- }
- }
- }
-
- $array[$v.'年'] = $banyear_arr;
- }else if($leixing == 4){
-
- $array = $year_arr;
- }
-
- }
-
- echo apireturn(200,'success',$array);die;
-
- }
leixing的值为1 查询年-周、2为年-季度、3年-半年、4年
运行结果如下(年-季度)
- {
- "status": 200,
- "msg": "success",
- "data": {
- "2023年": [
- "第4季度",
- "第3季度",
- "第2季度",
- "第1季度"
- ]
- }
- }
#开始时间目前是写死的 可以根据自己需求修改#