PHP — Strtotime não gerando datas futuras longas

Entenda os limites da função strtotime em PHP e como ultrapassá-los usando a classe DateTime

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!

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:

2,147,483,647 - Wikipedia

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:

Por hoje é só, pessoal! 🛑

Até mais! 👋