Warning: count(): Parameter must be an array or an object that implements Countable in /var/www/html/wp-includes/post-template.php on line 284

PHP : Le bug de l’an 2038

Arghhhh ! Encore un !

Après le bug de l’an 2000, le bug de l’an 2038. En effet en PHP, il est fréquent que des applications utilisent des dates en « unix timestamp ». Ce format représente le nombre de secondes écoulées depuis l’ère Unix, le 1er janvier 1970 et est donc représenté dans un entier long signé (32 bits).

Mais si on calcule bien, une année, et bien …  ca fait beaucoup de secondes ! En effet une année contient
[code lang= »text »]
365jrs * 24h * 60min * 60sec = 31 536 000 sec
[/code]
Un entier long peut aller jusque 4 294 967 295, donc le timestamp ne peut considérer qu’une période de :
[code lang= »text »]
2 147 483 647 / 31 536 000 = 68 années
[/code]

Ce qui fait de 1970 à 2038, le compte est bon !

Bref, cela pose déjà problème aujourd’hui pour l’enregistrement des anniversaires qui ne peuvent être antérieurs à 1970 et postérieurs à 2038. Mais à terme, les fonctions php du type date(), ou strtotime() risquent d’être inutiles.

Bref, la solution consisterait donc à utiliser un objet Date, qui prend en charge toutes les dates de manière bien plus pratique. Par contre ses performances sont plus réduites.

Il faut alors trouver un mixte. Puisque la date fatidique ne se surviendra pas avant plus de 20 ans, il est possible de conserver l’unix timestamp pour les dates à court termes (du type date du jour). Par contre, les dates à long terme (rendez-vous, date de fin du monde …) ou sortant de l’intervalle (anniversaires, …) , seront obligatoirement gérées via l’objet Date.

Côté mySQL, je vous conseille plutôt d’utiliser un type Date ou DateTime, non seulement pour la lisibilité des enregistrements mais aussi pour une meilleure gestion dans les requêtes.

Pour conclure, certes ce sujet est trivial, mais je n’avais pas pris conscience du problème avant d’y être confronté … Du coup, je préfère vous prévenir 😉

Vous aimerez aussi...

Laisser un commentaire

%d blogueurs aiment cette page :