javascript date getYear() renvoie des résultats différents entre IE et Firefox, comment les aborder?
Apparemment javascript date de la méthode de l'objet getYear() renvoie des résultats différents entre IE8 et Firefox3.6 (j'ai les 2 sur ma machine, pas sûr que les autres navigateur ou de la version)
Date d = new Date();
alert(d.getYear());
FF3.6 ==> 111 (year since 1900? i guess)
IE8 ===> 2011
J'ai été seulement de tester sur Firefox et maintenant mon code Javascript qui permet de régler la valeur de retour de getYear() me donne maintenant 3911 à cause de mon codage.
var modified = d.getYear() + 1900
Sur Firefox c'retour 2011. Mais si j'applique cette approche sur IE8, c'retour 3911.
Je pouvais ajouter de la logique de distinguer IE et Firefox, mais je ne veux pas ajouter de telles if/else partout dans mon code où il y a des navigateur dépendante des pièces de ce genre. Est-il d'autres façon d'aborder ce problème?
var browserName=navigator.appName;
if (browserName=="Netscape") {
var modified = d.getYear() + 1900
}
else if(browserName=="Microsoft Internet Explorer") {
var modified = d.getYear();
}
"l'année depuis 1900? je suppose que" Pourquoi deviner? Le cahier des charges est disponible gratuitement: ecma-international.org/publications/standards/Ecma-262.htm
thx pour le lien je vais jeter un oeil.
msdn.microsoft.com/en-us/library/windows/apps/... dit que getYear est obsolète. Si c'est déconseillé, pourquoi ont-ils jouer avec ça?!
OriginalL'auteur masato-san | 2011-04-23
Vous devez vous connecter pour publier un commentaire.
Utilisation
getFullYear()
au lieu degetYear()
.getYear
est y2k conforme car le résultat n'est pas limité à deux chiffres. Par exemple, il sera de retour 112 pour 2012, pas 12. C'est un unixy chose.OriginalL'auteur psynnott
essayez d'utiliser getFullYear() à la place getYear
c'est bien, Mikey G... comme le but est toujours de résoudre les OP et de partager l'expérience/d'apprentissage. 😉
OriginalL'auteur Naren Sisodiya
Si IE8 est de vous donner 2011,C'est un bug dans IE8 (et versions antérieures, consultez mise à jour ci-dessous).getYear
est défini dans la spécification (Section B. 2.4) comme étant:NaN
, retourNaN
.YearFromTime(LocalTime(t)) − 1900
.Donc maintenant, 111 est la valeur correcte. Cette définition est reprise de la 3e édition, si nous parlons ~12 ans de comportement spécifié.
Comme d'autres l'ont dit, l'utilisation des
getFullYear
d'obtenir un plus à la valeur d'utilité, mais c'est une IE8 bugsi c'est vraiment comme vous le dites (je n'ai pas IE8 pratique pour vérifier).Mise à jour: Bien, je vais être. Juste essayé, et Microsoft ne se tromper. IE6, IE7 et IE8 disent tous "2011". La bonne nouvelle est qu'ils ont enfin fixé, IE9 dit "111" comme il se doit. Vous pouvez l'essayer dans votre navigateur ici: http://jsbin.com/ofuyi3
OriginalL'auteur T.J. Crowder
Ne comptez pas sur les versions de produit lorsque vous n'avez pas à. Au lieu de cela, compter sur la différence que vous souhaitez corriger lui-même. Si vous voulais
getYear
's bonne valeur, vous pouvez l'obtenir à l'aide deJe réalise que les gens ont suggéré une meilleure façon de faire de l' résultat, mais je pensais que le réel question valait la peine de répondre.
OriginalL'auteur ikegami
Utilisation date.getFullYear();
bla.. dois répondre avec au moins 30 caractères...
OriginalL'auteur RobG