php获取每个月的开始和结束时间

php php 805      收藏
php获取每个月的开始和结束时间

    /**
     * 获取每个月的开始和结束时间
     * @param $start
     * @param $end
     * @return array|string
     * @since 2018/3/23 17:49
     */
    function getMonthFromRange($start, $end)
    {
        if (!is_numeric($start) || !is_numeric($end) || ($end <= $start)) return '';
        $startTime = date('Y-m', $start);
        $endTime = date('Y-m', $end);
        //转为时间戳
        $startTime = strtotime($startTime . '-01');
        $endTime = strtotime($endTime . '-01');
        $i = 0;
        $lastData = array();
        while($startTime<=$endTime){
            $month = array();
            //这里累加每个月的的总秒数 计算公式:上一月1号的时间戳秒数减去当前月的时间戳秒数
            if ($i == 0) {
                $month[] = date('Y-m-d H:i:s', $start);
                $firstday = date('Y-m-01', $start);
                $month[] = date('Y-m-d 23:59:59', strtotime("$firstday +1 month -1 day"));
            } elseif ($startTime == $endTime) {
                $month[] = date("Y-m-d H:i:s", mktime(0, 0, 0, date("m", $startTime), 01, date("Y", $startTime)));
                $month[] = date('Y-m-d H:i:s', $end);
            } else {
                $month[] = date("Y-m-d H:i:s", mktime(0, 0, 0, date("m", $startTime), 01, date("Y", $startTime)));
                $month[] = date("Y-m-d H:i:s", mktime(23, 59, 59, date("m", $startTime), date('d', strtotime("$month[0] +1 month -1 day")), date("Y", $startTime)));
            }
            $startTime += strtotime('+1 month', $startTime) - $startTime;
            $lastData[$i] = $month;
            $i++;
        }
        return $lastData;
    }