web-dev-qa-db-fra.com

Date minimum et maximum

Je me demandais quelle est la date minimale et maximale autorisée pour un objet Javascript Date. J'ai trouvé que la date minimum était quelque chose comme 200 000 BC, mais je ne pouvais obtenir aucune référence à ce sujet.

Est-ce que quelqu'un connaît la réponse? J'espère juste que cela ne dépend pas du navigateur.

Une réponse en "Epoch time" (= millisecondes à partir du 1970-01-01 à 00:00:00 UTC + 00) serait la meilleure.

116
MaxArt

A partir de la spécification, §15.9.1.1 :

Un objet Date contient un numéro indiquant un instant donné dans une milliseconde. Un tel nombre s'appelle une valeur de temps. Une valeur de temps peut également être NaN, indiquant que l'objet Date ne représente pas un instant spécifique.

Le temps est mesuré en ECMAScript en millisecondes à partir du 01 janvier 1970 UTC. Dans le temps, les secondes intercalaires sont ignorées. On suppose qu'il y a exactement 86 400 000 millisecondes par jour. Les valeurs de nombre ECMAScript peuvent représenter tous les nombres entiers compris entre –9 007 199, 254, 740, 992 et 9 007, 199, 254, 740, 992; cette plage est suffisante pour mesurer les délais en millisecondes à tout instant compris entre environ 285 616 années, en avant ou en arrière, à partir du 1er janvier 1970 UTC.

La plage de temps prise en charge par les objets Date ECMAScript est légèrement inférieure: exactement –100 000 000 jours à 100 000 000 jours, mesurée par rapport à minuit au début du 1er janvier 1970 UTC. Cela donne une plage de 8 640 000 000 000 000 millisecondes aux deux côtés du 1er janvier 1970 UTC.

Le moment exact de minuit au début du 1er janvier 1970 UTC est représenté par la valeur +0.

Le troisième paragraphe est le plus pertinent. Sur la base de ce paragraphe, nous pouvons obtenir la date la plus proche précise par spécification de new Date(-8640000000000000), qui est le mardi 20 avril, 271 821 avant notre ère (BCE = avant époque commun , par exemple, l'année -271 821 ).

157
T.J. Crowder

Pour augmenter la réponse de T.J., le dépassement des valeurs min/max génère une date invalide.

let maxDate = new Date(8640000000000000);
let minDate = new Date(-8640000000000000);

console.log(new Date(maxDate.getTime()).toString());
console.log(new Date(maxDate.getTime() - 1).toString());
console.log(new Date(maxDate.getTime() + 1).toString()); // Invalid Date

console.log(new Date(minDate.getTime()).toString());
console.log(new Date(minDate.getTime() + 1).toString());
console.log(new Date(minDate.getTime() - 1).toString()); // Invalid Date
39
Shaun Luttin