¿Cómo obtener el mes y año anterior en relación con el día de hoy, usando el tiempo de inicio y la fecha?

Necesito obtener el mes y año anterior, en relación con la fecha actual.

Sin embargo, vea el siguiente ejemplo.

// Today is 2011-03-30
echo date('Y-m-d', strtotime('last month'));

// Output:
2011-03-02

Este comportamiento es comprensible (hasta cierto punto), debido a la diferente cantidad de días en febrero y marzo, y el código en el ejemplo anterior es lo que necesito, pero funciona solo 100% correctamente entre el 1 y el 28 de cada mes.

Entonces, cómo obtener el mes pasado y el año (piense endate("Y-m")) de la manera más elegante posible, ¿cuál funciona para todos los días del año? La solución óptima se basará enstrtotime análisis de argumentos.

Actualizar. Para aclarar un poco los requisitos.

Tengo un fragmento de código que obtiene algunas estadísticas de los últimos meses, pero primero muestro las estadísticas del mes pasado y luego las cargo otros meses cuando es necesario. Ese es el propósito previsto. Por lo tanto, durante ESTE mes, quiero saber qué mes-año debo usar para cargar estadísticas de meses ANTERIORES.

También tengo un código que reconoce la zona horaria (no es realmente importante en este momento), y que aceptastrtotime -compatible string como entrada (para inicializar la fecha interna), y luego permite ajustar la fecha / hora, también usandostrtotime cadenas compatibles.

Sé que se puede hacer con pocos condicionales y matemáticas básicas, pero eso es realmente complicado, en comparación con esto, por ejemplo (si funcionó correctamente, por supuesto):

echo tz::date('last month')->format('Y-d')

Así que SOLO necesito mes y año anterior, en unstrtotime -compatible fashion.

Answer (gracias, @dnagirl):

// Today is 2011-03-30
echo date('Y-m-d', strtotime('first day of last month')); // Output: 2011-02-01

Respuestas a la pregunta(14)

Su respuesta a la pregunta