Question

Je suis de la compréhension qu'en raison de la nature que PHP représente les dates en utilisant millisecondes, vous ne pouvez pas représenter les dates passé 2038. J'ai un problème où je veux calculer les dates loin dans l'avenir. Des milliers d'années loin.

Il est évident que je ne peux pas utiliser la fonction de la date de php pour représenter cette date en raison de la limite, cependant, j'ai quelque chose de mon côté ... Tout ce que je veux faire est de stocker l'année, le mois et le jour. Je ne me soucie pas pour l'heure, minute, seconde et millisecondes.

Ai-je raison de penser que sans inclure ces informations supplémentaires, je devrais être en mesure de calculer beaucoup plus loin dans l'avenir parce que je suis prêt à jeter beaucoup d'informations. Est-ce une bibliothèque qui fait actuellement cela? Si ne pas avoir des conseils sur la façon d'aborder ce problème?

Était-ce utile?

La solution

Vous pouvez également utiliser le DateTime classe, ce qui représente en interne indépendamment les composants de temps. Il est donc pas sensible à la limitation 2038 (sauf si vous utilisez :: getTimestamp).

Autres conseils

peut utiliser une plate-forme 64 bits.

La taille d'un entier dépend de la plateforme, mais une valeur maximale d'environ deux milliards est la valeur habituelle (ce qui est 32 bits signés). ont généralement une valeur maximale d'environ 9E18 plates-formes 64 bits.

Source .

Découvrez votre plate-forme est 64bit avec var_dump(PHP_INT_SIZE === 8). Si TRUE, votre système est 64 bits.

PHP a introduit Datetime () classe dans la version 5.2 pour résoudre ce problème. Mais vous devez toujours être dans OS 64 bits.

Oubliez Windows! Même si vous utilisez Apache 64 bits sur Windows 64 bits!

$timestamp = strtotime('22-09-2508');
var_dump ($timestamp);
// returns bool false using WAMP 64-Bit over Windows 64 Bit

Si vous devez timestamps calculate, utilisez un système 64 bits (et non Windows):

$timestamp = strtotime('22-09-2508');
var_dump ($timestamp);
// returns int 17000496000 using a LAMP Server

Vous pouvez exécuter une lampe Server à l'aide de VMWare sur votre Windows et plus probable que votre serveur hôte final utiliserez ce service 64 bits ainsi.

En d'autres termes:

if (intval("9223372036854775807")==9223372036854775807) {
  // 64-bit
} else {
  // 32-bit
}

Got it?

Remarque: le temps () et getTimestamp () à la fois de ok de travail dans un environnement 64 bits (linux) après année 2038 ..

Vous avez raison que PHP ne vous permet pas de gérer les dates> 2038, nativement. Cependant, il existe des bibliothèques telles que celui-ci PROFITEZ du fait que les points flottants sont 64 bits, ce qui permet si nécessaire, vous pouvez ignorer ce problème. (Tout en supposant que vous utilisez un système 32 bits ... si vous utilisez 64 bits, vous êtes très bien).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top