PHP — Strtotime não gerando datas futuras longas
Olá Gente
Hoje me deparei com um problema curioso, ao aplicar o script abaixo me retornou 1969–12–31!
<?
echo date("Y-m-d", strtotime("+20 years"));
?>
Mas porque?
Checando a documentação da função strtotime vemos a causa entre as primeiras notas:

Ou seja, o ano máxima suportada é 2038 para versões 32 bits do PHP.
Mas ainda fica a dúvida, porque isto?
Bom, o problema é que o strtotime funciona calculando as datas em “Unix timestamp”, onde a data é convertida em um número inteiro positvo começando de 1/1/1970.
Então, o script acima, acaba gerando o “timestamp” de “2258023377” e este número inteiro positivo é maior que o limite de calculo de sistemas de 32 bits:
Como resolver?
Opção #1
Mude sua versão do PHP para a versão 64 bits, nesta versão, o limite de números inteiros positivos é de 9,223,372,036,854,775,807 (Bem Grandeeeeeeee)
Opção #2
Ou utilizamos a class DateTime, que existe para tratar datas nativamente.
Exemplo:
<?
$EndDateTime = DateTime::createFromFormat("Y-m-d", "2021-07-21");
$EndDateTime->modify("+20 years");
$EndDateTime2 = $EndDateTime->format("Y-m-d");
echo $EndDateTime2;
?>
Por hoje é só, pessoal! 🛑
Até mais! 👋
Leia também
API Mágica: notificações Web Push no navegador com PHP
Web Push com a API Mágica em PHP puro: o navegador se inscreve, o seu site envia a notificação e a API conta o clique. Sem Composer e sem biblioteca.
IndexNow: avisando o Bing e o Yandex mais rápido
Como criar a chave do IndexNow e avisar Bing e Yandex das suas páginas novas com Node.js e PHP: as requisições, os erros reais e as armadilhas.
llms.txt: por que importa e como gerar em PHP
Por que o llms.txt importa para quem quer ser citado pela IA, e como gerar o seu em PHP puro lendo o sitemap.xml que voce ja tem.