Como obter o mês e o ano anteriores em relação a hoje, usando strtotime e date?

Preciso obter o mês e o ano anteriores, em relação à data atua

No entanto, veja o exemplo a segui

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

// Output:
2011-03-02

Este comportamento é compreensível (até certo ponto), devido ao número diferente de dias em fevereiro e março, e o código no exemplo acima é o que eu preciso, mas funciona apenas 100% corretamente entre 1 e 28 de cada mês.

Então, como chegar no mês passado e no ano (pense emdate("Y-m")) da maneira mais elegante possível, o que funciona para todos os dias do ano? A solução ideal será baseada emstrtotime análise de argumento.

Atualizar. Para esclarecer um pouco os requisitos.

Tenho um código que obtém algumas estatísticas dos últimos dois meses, mas mostro as estatísticas do mês passado e carrego outros meses quando necessário. Esse é o objetivo. Portanto, durante ESTE mês, desejo descobrir qual mês do ano devo extrair para carregar as estatísticas do mês ANTERIOR.

Eu também tenho um código que reconhece o fuso horário (que não é realmente importante no momento) e que aceitastrtotimeequência compatível com @ como entrada (para inicializar a data interna) e, em seguida, permite que a data / hora seja ajustada, também usandostrtotime cordas compatívei

Eu sei que isso pode ser feito com poucos condicionais e matemática básica, mas isso é realmente confuso, comparado a isso, por exemplo (se funcionou corretamente, é claro):

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

ntão, eu só preciso do mês e ano anteriores, em umstrtotime moda compatível.

Resposta (obrigado, @ dnagirl):

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