javascript date getYear()在IE和Firefox之间返回不同的结果,如何处理?

时间:2011-04-23 08:12:50

标签: javascript date browser-detection

显然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();
}

5 个答案:

答案 0 :(得分:20)

使用getFullYear()代替getYear()

答案 1 :(得分:8)

尝试使用getFullYear()代替getYear

答案 2 :(得分:4)

如果IE8给你2011,这是IE8 中的一个错误(以及之前的,请参见下面的更新)the specification(第B.2.4节)中定义getYear为:

  1. t 成为这个时间值。
  2. 如果 t NaN,请返回NaN
  3. 返回YearFromTime(LocalTime(t)) − 1900
  4. 因此,现在,111是正确的值。这个定义与第3版没有变化,所以我们谈论的是〜12年的特定行为。

    正如其他人所说的那样,使用getFullYear来获得更有用的值,但这是一个IE8错误如果它真的如你所说(我没有IE8方便检查)


    更新:我会的。刚试过,微软做错了。 IE6,IE7和IE8都说“2011”。好消息是他们终于修复了它,IE9应该说“111”。您可以在浏览器中尝试:http://jsbin.com/ofuyi3

答案 3 :(得分:4)

当您不需要时,请不要依赖产品版本。相反,依靠你想要纠正自己的差异。如果您希望getYear的值正确,可以使用

获取
Date d = new Date();
var year = d.getYear();
if (year < 1900) {  // Should always be true, but isn't in older IE.
   year += 1900;
}

我意识到人们已经提出了更好的方法来获取结果,但我认为实际的问题值得回答。

答案 4 :(得分:2)

使用date.getFullYear();

blah ..得到至少30个字符的答案......