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