显然javascript日期对象的方法getYear()在IE8和Firefox3.6之间返回不同的结果(我的机器上有那些2,不确定其他浏览器或版本)
Date d = new Date();
alert(d.getYear());
FF3.6 ==> 111 (year since 1900? i guess)
IE8 ===> 2011
我一直只在Firefox上测试,现在我调整getYear()的返回值的Javascript代码现在因为我的编码而给了我3911。
var modified = d.getYear() + 1900
在Firefox上它返回2011.但是如果我在IE8上应用这种方法,它将返回3911。
我可以添加逻辑来区分IE和Firefox但我不想在我的代码中添加这样的if / else,只要有像这样的浏览器相关部分。还有其他方法可以解决这个问题吗?
var browserName=navigator.appName;
if (browserName=="Netscape") {
var modified = d.getYear() + 1900
}
else if(browserName=="Microsoft Internet Explorer") {
var modified = d.getYear();
}
使用getFullYear()
而不是getYear()
。
尝试使用getFullYear()而不是getYear
如果IE8给你2011年,
这是IE8中的一个错误(早期,请参阅下面的更新)。 getYear
在the specification(第B.2.4节)中定义为:
NaN
,请返回NaN
。YearFromTime(LocalTime(t)) − 1900
。因此,现在,111是正确的值。这个定义与第3版没有变化,因此我们谈论了〜12年的特定行为。
正如其他人所说,使用getFullYear
获得更有用的价值,但这是一个IE8错误
如果它真的如你所说(我没有IE8方便检查)
。
更新:好吧,我会的。刚尝试过,微软确实弄错了。 IE6,IE7和IE8都说“2011”。好消息是他们终于修复了它,IE9应该说“111”。您可以在浏览器中尝试:http://jsbin.com/ofuyi3
当您不需要时,请不要依赖产品版本。相反,依靠你想要纠正自己的差异。如果你想要getYear
的正确值,你可以使用它
Date d = new Date();
var year = d.getYear();
if (year < 1900) { // Should always be true, but isn't in older IE.
year += 1900;
}
我意识到人们已经提出了一种更好的方法来获得结果,但我认为实际的问题值得回答。
使用date.getFullYear();
blah ..得到至少30个字符的答案......