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!