PHP 找出两个日期之间的所有的月份

由于公司的数据表是按月份命名存放的,有时候找一条数据不知道具体的日期,一个个找太慢,就写了个自定义的function,当时能解决了问题,但是现在看觉着不够完美,代码不够简洁,用笨方法实现的,希望对大家有用,如果能改动的更好,希望大家能在评论区指正。互相学习。
以下就是此函数的代码:

function DiffDate($date1, $date2) {
    
    
    //首次进入将分割开始与结束日期。 
    $startDate = explode('-', $date1);
    $endDate = explode('-', $date2);

    $startYear = $startDate[0];
    $endYear = $endDate[0];

    $startMonth = $startDate[1];
    $endMonth = $endDate[1];

    $YmArr = [];
    //同一年和跨年分开处理。
    if($startYear != $endYear){
        //找出跨年所有的月份
        for ($year=$startYear; $year < $endYear; $year++) { 
            for ($month=$startMonth; $month <= 12; $month++) { 
                    $lenth = strlen($month);
                    if($lenth != 2){
                        $month = '0'.$month;
                    }
                    $Ym = $year.$month;//拼接日期,根据自己需要的格式拼接。
                    $YmArr[] = $Ym;

            }
            $startMonth = 1; //跨年的时候重置月份

        }
        //找出本年到现在的所有月份
        for ($nowMonth=1; $nowMonth <= $endMonth; $nowMonth++) { 
                $lenth = strlen($nowMonth);
                if($lenth != 2){
                    $nowMonth = '0'.$nowMonth;
                }
                $nowYm = $endYear.$nowMonth;
                $YmArr[] = $nowYm;
        }
    }else{
        for ($nowMonth=$startMonth; $nowMonth <= $endMonth; $nowMonth++) { 
                $lenth = strlen($nowMonth);
                if($lenth != 2){
                    $nowMonth = '0'.$nowMonth;
                }
                $nowYm = $endYear.$nowMonth;
                $YmArr[] = $nowYm;
        }
    }
    return $YmArr;
}

$arr = DiffDate('2017-04','2018-10');

输出结果:
这里写图片描述

希望能帮到正好需要此功能的朋友。

猜你喜欢

转载自blog.csdn.net/m0_37752860/article/details/80180929