¿Hay alguna forma más sencilla de obtener la lista de todos los meses

¿Hay alguna forma más sencilla de obtener la lista de todos los meses y años entre dos fechas que la mía?

Quiero obtener todos los meses y años en una matriz entre dos fechas. Quiero la salida como este formato: Y-m

Lo hice. Pero, solo quiero saber si hay alguna manera simple de obtener el mismo resultado.

Ahí está mi código:

public function __construct()
{
    $this->params['start-date'] = date('Y-m-d', strtotime("01-01-2016"));
    $this->params['end-date'] = date('Y-m-d', time());
}

/**
 * @return array
 */
private function _getAllMonths()
{
    $start  = date_parse($this->params["start-date"]);
    $end  = date_parse($this->params["end-date"]);

    $output[] = ['month' => $start["year"]."-0".$start["month"]];
    //loop years
    for($i=(int)$start["year"];$i<=(int)$end["year"];$i++)
    {
        //control months and start year
        $k = $i == $start["year"] ? (int)$start["month"] + 1 : 1;
        //loop months
        for($j=$k;$j<13;$j++)
        {
            if($i==$end["year"] && $j==$end["month"])
                break;
            $output[] = ["month" => $i."-".str_pad($j, 2, "0", STR_PAD_LEFT)];
        }
    }
    return $output;
}

¿Por favor explícame cómo?

Mostrar la mejor respuesta

La respuesta a tu pregunta es sí

Trabajar con objetos DateTime o marcas de tiempo en lugar de cadenas sería una gran mejora.

@RiggsFolly, ¿y cómo?

¿Qué tal esto para empezar?

$start = new \DateTime('now');
$end = new \DateTime('now + 3 years');
$interval = new \DateInterval('P1M');
$period = new \DatePeriod($start, $interval, $end);

foreach($period as $date) {
    echo $date->format('Y-m-d H:i:s') . "\n";
}

No es un gran paso adaptarlo a tus necesidades

Páginas del manual de PHP

  1. DateTime
  2. DateInterval
  3. DatePeriod

Si estás haciendo mucho con las fechas, te recomiendo una biblioteca llamada Carbon

¡Gracias! ¡Funciona perfectamente! ¿Podría explicar solo esta fila: $intervalo = new \DateInterval('P1M');

E investigaré esto en todas las clases y en la biblioteca de carbono. ¡Muchas gracias!

Esa línea significa "Quiero tener un intervalo de Período 1 Mes". Puede encontrar más aquí

Buena suerte amigo, he estado trabajando con PHP durante más de 20 años (Dios mío) y siempre estoy aprendiendo cosas nuevas.