J'ai converti une date 01-01-2039 en utilisant la fonction php date ():

echo date("d-m-Y",strtotime('01-01-2039'));

La sortie est affichée comme suit: 01-01-1970

Une solution pour ça?

0
Sujith Kamath 11 avril 2020 à 15:22

2 réponses

Meilleure réponse

Cette réponse issue d'une conversation de commentaire

Le problème est causé par le problème d'époque d'horodatage Unix.

La solution à cela pour PHP natif est d'utiliser la version PHP 64 bits qui gère correctement ce débordement d'entier particulier.

echo (PHP_INT_SIZE===8)?"64 bit ":"32 bit ";

Ce code ci-dessus montre la version PHP.

Si PHP 32 bits est présent, cela doit être remplacé par PHP 64 bits

0
Martin 11 avril 2020 à 12:55

En plus de la réponse de @ Martin, je tiens à souligner l'ambiguïté causée par certains formats de date lors de l'utilisation de strtotime.

Dans le manuel:

Les dates au format m / j / a ou j-m-y ne sont pas ambiguës en regardant le séparateur entre les différents composants: si le séparateur est un barre oblique (/), alors l'américain m / d / y est supposé; alors que si le le séparateur est un tiret (-) ou un point (.), puis le format européen d-m-y est assumé. Si, cependant, l'année est donnée dans un format à deux chiffres et le séparateur est un tiret (-), la chaîne de date est analysée comme y-m-d .

Pour éviter toute ambiguïté potentielle, il est préférable d'utiliser ISO 8601 ( AAAA-MM-JJ ) dates ou DateTime::createFromFormat() lorsque cela est possible.

$dt = DateTime::createFromFormat('d-m-Y', '01-01-2039');
echo $dt->format('d-m-Y');
0
N'Bayramberdiyev 11 avril 2020 à 13:08