php获取指定时间范围内所有的月开始到结束

php获取指定时间范围内所有的月开始到结束

示例:

$time_slot = '2019-11-15,2020-01-25'

返回结果:

[ "2019-11-15,2019-11-30", "2019-12-01,2019-12-31","2020-01-01,2020-01-25" ]

代码如下:

   public function time_slot_list($time_slot){
        //获取时间范围始末
        $time_slot_start = explode(',',$time_slot)[0];
        $time_slot_end = explode(',',$time_slot)[1];
		// 获取始末年份
        $start_year_ident = explode('-',$time_slot_start)[0];
        $end_year_ident = explode('-',$time_slot_end)[0];
        // 获取始末月份
        $start_ident = explode('-',$time_slot_start)[1];
        $end_ident = explode('-',$time_slot_end)[1];
        if ($start_year_ident == $end_year_ident){
			//如果为同月,相当于全部统计
            if ($start_ident == $end_ident){
                $time_slot_list[] = $time_slot;
            }else{
				//判断月份间隔
                $num = (int)$end_ident - (int)$start_ident;
                $i=0;
				//生成逐月数据
                while ($i<=$num){
                    if ($i==0){
                        $firstday = date('Y-m-01', strtotime($time_slot_start));
                        $lastday = date('Y-m-d', strtotime("$firstday +1 month -1 day"));
                        $time_slot_list[] = $time_slot_start.",".$lastday;
                    }elseif ($i==$num){
                        $firstday = date('Y-m-01', strtotime($time_slot_end));
                        $time_slot_list[] = $firstday.",".$time_slot_end;
                    }else{
                        $firstday = date('Y-m-01', strtotime("$time_slot_start +$i month"));
                        $lastday = date('Y-m-d', strtotime("$firstday +1 month -1 day"));
                        $time_slot_list[] = $firstday.",".$lastday;
                    }
                    $i++;
                }
            }
        }else{
            //如果为同月,相当于统计几年的每个月
            if ($start_ident == $end_ident){
                //判断月份间隔
                $num = ((int)$end_year_ident - (int)$start_year_ident)*12;
                $i=0;
				//生成逐月数据
                while ($i<=$num){
                    if ($i==0){
                        $firstday = date('Y-m-01', strtotime($time_slot_start));
                        $lastday = date('Y-m-d', strtotime("$firstday +1 month -1 day"));
                        $time_slot_list[] = $time_slot_start.",".$lastday;
                    }elseif ($i==$num){
                        $firstday = date('Y-m-01', strtotime($time_slot_end));
                        $time_slot_list[] = $firstday.",".$time_slot_end;
                    }else{
                        $firstday = date('Y-m-01', strtotime("$time_slot_start +$i month"));
                        $lastday = date('Y-m-d', strtotime("$firstday +1 month -1 day"));
                        $time_slot_list[] = $firstday.",".$lastday;
                    }
                    $i++;
                }
            }else{
				//判断月份间隔
                $num = ((int)$end_year_ident - (int)$start_year_ident)*12 - (int)$start_ident + (int)$end_ident;
                $i=0;
				//生成逐月数据
                while ($i<=$num){
                    if ($i==0){
                        $firstday = date('Y-m-01', strtotime($time_slot_start));
                        $lastday = date('Y-m-d', strtotime("$firstday +1 month -1 day"));
                        $time_slot_list[] = $time_slot_start.",".$lastday;
                    }elseif ($i==$num){
                        $firstday = date('Y-m-01', strtotime($time_slot_end));
                        $time_slot_list[] = $firstday.",".$time_slot_end;
                    }else{
                        $firstday = date('Y-m-01', strtotime("$time_slot_start +$i month"));
                        $lastday = date('Y-m-d', strtotime("$firstday +1 month -1 day"));
                        $time_slot_list[] = $firstday.",".$lastday;
                    }
                    $i++;
                }
            }

        }
        return $time_slot_list;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值