Question

Pourquoi ce javascript renvoie-t-il 108 au lieu de 2008? le jour et le mois sont corrects mais pas l’année?

myDate = new Date();
year = myDate.getYear();

année = 108?

Était-ce utile?

La solution

C'est une Y2K , seules les années depuis 1900 sont comptées.

Il existe des problèmes de compatibilité maintenant que getYear() est déconseillé au profit de getFullYear() - from quirksmode :

  

Pour rendre le problème encore plus complexe, date.getYear () est obsolète de nos jours et vous devez utiliser date.getFullYear (), qui, à son tour, n'est pas pris en charge par les anciens navigateurs. Si cela fonctionne, cependant, il devrait toujours donner l'année complète, c'est à dire. 2000 au lieu de 100.

     

Votre navigateur donne les années suivantes avec ces deux méthodes:

* The year according to getYear(): 108
* The year according to getFullYear(): 2008

Il existe également des différences de mise en œuvre entre Internet Explorer et Firefox, car la mise en œuvre de <=> dans IE a été modifiée pour se comporter comme <=> - à partir de IBM :

  

Conformément à la spécification ECMAScript, getYear renvoie l'année moins 1900, ce qui devait à l'origine renvoyer & "98 &"; pour 1998. getYear était obsolète dans ECMAScript version 3 et remplacé par getFullYear ().

     

Internet Explorer a modifié getYear () pour qu'il fonctionne comme getFullYear () et le rendre compatible Y2k, tandis que Mozilla conservait le comportement standard.

Autres conseils

Comme getFullYear ne fonctionne pas dans les navigateurs plus anciens, vous pouvez utiliser quelque chose comme ceci:

Date.prototype.getRealYear = function() 
{ 
    if(this.getFullYear)
        return this.getFullYear();
    else
        return this.getYear() + 1900; 
};

Le prototype Javascript peut être utilisé pour étendre des objets existants, un peu comme les méthodes d’extension C #. Maintenant, nous pouvons simplement faire ceci;

var myDate = new Date();
myDate.getRealYear();
// Outputs 2008

Vérifiez la documentation. Ce n'est pas un problème lié à l'an 2000 - c'est l'absence d'un problème lié à l'an 2000! Cette décision a été prise à l'origine en C et a été copiée dans Perl, apparemment en JavaScript, et probablement dans plusieurs autres langues. Il y a bien longtemps, il semblait apparemment toujours souhaitable d'utiliser des années à deux chiffres, mais remarquablement, quiconque a conçu cette interface avait suffisamment de prévoyance pour se rendre compte qu'il était nécessaire de penser à ce qui se passerait en l'an 2000 et au-delà. chiffres, ils ont fourni le nombre d'années depuis 1900. Vous pouvez utiliser les deux chiffres, si vous êtes pressé ou si vous voulez être risqué. Ou, si vous souhaitez que votre programme continue de fonctionner, vous pouvez ajouter 100 au résultat et utiliser des années complètes à quatre chiffres.

Je me souviens de la première fois que j'ai manipulé des données de date en Perl. Etrangement, j'ai lu la documentation . Apparemment, ce n'est pas une chose commune. Un an ou deux plus tard, le 31 décembre 1999, je fus appelé au bureau pour corriger un bogue découvert à la dernière minute dans un code Perl contractuel, un truc avec lequel je n'avais jamais rien eu à faire. C’était précisément ce problème: l’appel à date standard renvoyait des années depuis 1900 et les programmeurs l’avaient traitée comme une année à deux chiffres. (Ils ont supposé qu’ils obtiendraient & «00 &»; En 2000.) En tant que jeune programmeur inexpérimenté, je me suis dit que nous avions payé autant pour un professionnel & » quot; travail, et ces personnes n’avaient même pas pris la peine de lire la documentation. Ce fut le début de nombreuses années de désillusion. maintenant je suis vieux et cynique. :)

En l’an 2000, la conférence annuelle YAPC Perl était appelée & "YAPC 19100 &"; en l'honneur de ce non-bug souvent rapporté.

De nos jours, dans le monde Perl au moins, il est plus logique d'utiliser un module standard pour le traitement des dates, qui utilise des années réelles à quatre chiffres. Pas sûr de ce qui pourrait être disponible pour JavaScript.

Il doit renvoyer le nombre d'années écoulées depuis l'année 1900.

utilisez date.getFullYear().

C’est (comme cela a été souligné correctement ailleurs) un événement lié à l’an 2000. Netscape (écrit avant 2000) est à l'origine renvoyé, par exemple 98 à partir de getYear(). Plutôt que de revenir à 00, il est retourné à 100 pour l'année 2000. D'autres navigateurs se sont ensuite présentés différemment, et tout le monde était malheureux, l'incompatibilité régnant.

Les derniers navigateurs étaient pris en charge getFullYear comme méthode standard pour renvoyer l'année complète.

Cette question est si ancienne qu’elle me fait pleurer de nostalgie pour les jours de la dotcom!

En effet, Date.getYear () renvoie le nombre d'années écoulées depuis 1900, exactement comme le temps local de Perl (). On peut se demander pourquoi une langue conçue dans les années 90 ne rendrait pas compte du chiffre d'affaires d'un siècle, mais que puis-je dire? Vous deviez être là. Cela avait un sens à l'époque (comme le faisait les animaux domestiques.com).

Avant 2000, on aurait pu être tenté de résoudre ce problème en ajoutant " 19 " au résultat de getYear (), résultant en " année 19100 bug " . D'autres ont déjà suffisamment répondu à cette question (ajoutez 1900 au résultat de getDate ()).

Peut-être que le livre que vous lisez sur JavaScript est un peu vieux?

Merci pour le souffle du passé!

Comme indiqué, n'utilisez jamais getYear(), mais plutôt getFullYear().

L’histoire n’est cependant pas aussi simple que & "; IE implémente GetYear() comme <=>. De nos jours, Opera et IE traitent <=> comme <=> a été spécifié à l'origine pour les dates antérieures à 2000, mais comme <=> pour les dates postérieures à 2000, tandis que webkit et Firefox respectent l'ancien comportement

.

Ceci génère 99 dans tous les navigateurs:

javascript:alert(new Date(917823600000).getYear());

Ceci génère 108 dans FF / WebKit et 2008 dans Opera / IE:

javascript:alert(new Date().getYear());

C'est bête. Il date du jour avant l’An 2000 et ne renvoie que le nombre d’années. depuis 1900 pour des raisons d'héritage. Utilisez getFullYear () pour obtenir l’année réelle.

J'utilise date.getUTCFullYear(); travailler sans problèmes.

Le nombre que vous obtenez est le nombre d'années écoulées depuis 1900. Ne me demandez pas pourquoi.

Comme d'autres l'ont dit, il renvoie le nombre d'années écoulées depuis 1900. Si c'est , c'est parce que, lorsque JavaScript a été inventé au milieu des années 90, ce comportement était à la fois pratique et cohérent. API date-heure dans d'autres langues. En particulier C. Et, bien sûr, une fois l’API établie, ils ne pouvaient pas la modifier pour des raisons de compatibilité avec les versions antérieures.

BTW, différents navigateurs peuvent retourner des résultats différents, il est donc préférable d’ignorer complètement cette fonction et d’utiliser toujours getFullYear ().

var date_object = new Date (); var année = date_objet.getYear (); si (année < 2000) {     année = année + 1900; } // vous obtiendrez l'année complète ....

il retourne à 4 chiffres - 1900, ce qui était peut-être cool il y a plus de 9 ans, mais il est plutôt retardé maintenant. Java.util.Date en Java le fait également.

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