Obtenha as datas anteriores em PHP
Datas e timestamps de data/hora são cruciais em muitos sistemas de software e aplicações web. Eles nos permitem
rastrear eventos, analisar padrões e fornecer aos usuários informações pertinentes com base no tempo. Neste post
vamos explorar como lidar com datas em PHP (date), especificamente sobre como obter a data para o dia anterior, ou
mês anterior ou mesmo ano passado.
Obter o mês anterior na data do PHP
Imagine que você está trabalhando em um projeto PHP e precisa buscar a data do mês passado. As funções date() e
strtotime() do PHP estão aqui para ajudar. No entanto, essas funções podem levar a mal-entendidos se não forem usadas corretamente.
No início, você pode ficar tentado a usar este código:
$prevmonth = date('M Y');
No entanto, isso lhe dará o mês/ano atual, não o mês anterior. Para modificar isso, você pode usar a função PHP
strtotime(), que analisa descrições textuais datetime em inglês com timestamp de data/hora Unix. Isso nos leva a
esta solução:
echo date("Y-n-j", strtotime("first day of previous month"));
echo date("Y-n-j", strtotime("last day of previous month"));
Ao executar isso em 3 de novembro de 2014, você receberá 2014-10-1 e 2014-10-31 - o primeiro e último dia do mês
anterior. Este método é simples e altamente recomendado.
Um ponto de atenção: Usar strtotime('-1 month', $time) pode causar problemas com o resultado. Isso ocorre
porque -1 month é o mesmo que -30 days, o que pode levar a erros se o mês atual tiver 31 dias ou fevereiro
for o último mês. Portanto, tenha cuidado ao usar esse método.
Um método “incorreto” que é frequentemente usado é:
$lastMonth = date('M Y', strtotime("-1 month"));
Este método é propenso a erros. Se o mês atual tiver 30 ou mais dias, mas o mês anterior tiver menos de 30
dias, esse método retornará a mesma data que o mês atual. Você pode testar o comportamento com o seguinte
exemplo que imprimirá Sex, 03 Mar 2023 00:00:00 +0000 e não Ter, 28 Fev 2023 00:00:00 +0000:
$the_date = strtotime('31.03.2023');
echo date('r', strtotime('-1 month', $the_date));
A maneira correta de buscar a data do mês passado, neste caso, seria:
echo date("Y-m", strtotime("first day of previous month"));
O método acima retornará com precisão o primeiro dia do mês anterior. Por exemplo, considerando que você está em
2023-03-30 o resultado seria 2023-02. Note que usar apenas o mês anterior resultaria em um
comportamento semelhante a -1 month.
Outro método elegante e confiável de buscar a data do mês anterior é usar as funções DateTime() e
DateInterval() do PHP. Aqui está uma função de exemplo:
$now = new DateTime();
$lastMonth = $now->sub(new DateInterval('P1M'));
echo $lastMonth->format('Y-m');
Essa função usa DateTime para obter a data e hora atuais e DateInterval para subtrair um mês da data atual.
Obter o dia anterior e ano em PHP date
Para obter o dia anterior em PHP data tem um uso mais direto, Você pode simplesmente passar -1 day como um parâmetro
sem arriscar um comportamento inesperado:
Obter dia anterior em PHP usando `strtotime'
A função strtotime é usada para converter uma descrição de data/hora em um timestamp de data/hora Unix.
$yesterday = date("Y-m-d", strtotime("-1 day"));
echo $yesterday;
Obter dia anterior em PHP usando DateTime e o método modify
A classe DateTime representa data e hora e o método modify altera o timestamp de data/hora.
$date = new DateTime();
$date->modify('-1 day');
$yesterday = $date->format('Y-m-d');
echo $yesterday;
Obter dia anterior em PHP usando DateTime e p método sub com DateInterval
A classe DateInterval representa um intervalo de tempo e pode ser usada com o método sub de DateTime para
subtrair um dia.
$date = new DateTime();
$date->sub(new DateInterval('P1D'));
$yesterday = $date->format('Y-m-d');
echo $yesterday;
Obter o ano anterior em PHP
Obter o ano anterior com datas em PHP é bastante semelhante a obter o dia anterior. Tudo o que você precisa fazer é
substituir o parâmetro day por year.
$lastYear = date("Y", strtotime("-1 year"));
echo $lastYear;
$date = new DateTime();
$date->modify('-1 year');
$lastYear = $date->format('Y');
echo $lastYear;
$date = new DateTime();
$date->sub(new DateInterval('P1Y'));
$lastYear = $date->format('Y');
echo $lastYear;
Considerações finais
Lembre-se, as datas podem ser complicadas de trabalhar devido a variações de dias por mês, anos bissextos e fusos horários diferentes. Portanto, é sempre uma boa ideia verificar sua saída executando seu código com cenários diferentes.
Agora que você tem as informações corretas e o conhecimento para implementá-lo, é hora de colocar isso em ação!


Comentários