Pourquoi ne timestamp a une limite à 2038?
Je viens de découvrir, l'exécution d'un calendrier de script, que les horodateurs en PHP a une limite à 2038. Ce que cela signifie vraiment? Pourquoi est-il 2038 au lieu de 2050 ou 2039? Pourquoi un délai si les horodatages juste compter en secondes à partir d'une date donnée (1970)?
InformationsquelleAutor Shoe | 2011-05-04
Vous devez vous connecter pour publier un commentaire.
La limite est imposée par les 4 octets signée entiers que la plupart des bibliothèques C utilisation pour la représentation qui comptent. Petit calcul rapide (ce qui suppose de 365 jours par ans, pas tout à fait correct):
Ce qui implique aussi une limite inférieure de ~1900. Certaines bibliothèques ont commencé à introduire 64 bits de l'époque des comtes, mais ils sont peu et loin entre, pour le moment.
La valeur maximale d'un entier de 32 bits, 2 147 483 647. Si vous ajoutez +1 pour que, vous obtenez -2,147,483,647. De 2 147 483 647 secondes de 01-01-1970 00:00:00 est le 19 janvier 2038. Si vous ajoutez une seconde de plus, vous obtenez une date quelque part en 1902.
en raison de la limite de type de données INT sur 32 bits machine
http://php.net/manual/en/function.mktime.php
De php.net :
"Le maximum possible de la date acceptée par mktime() et gmmktime() dépend de l'emplacement actuel de fuseau horaire.
Par exemple, l'horodateur de 32 bits de dépassement se produit à 2038-01-19T03:14:08+0000Z. Mais si vous êtes dans un -0500 UTC time zone (comme l'est en Amérique du Nord), le maximum de temps avant débordement (pour les anciennes versions de PHP sur Windows) est 2038-01-18T22:14:07-0500Z, indépendamment de savoir si vous êtes de passage à mktime() ou gmmktime()."
je pense qu'il est stocké dans un nombre fixe de bits, ce qui signifie une limite de la taille de l'horodatage peut obtenir. Nous avons pu faire quelques calculs pour comprendre exactement.