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 aceitastrtotime
equê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