【问题标题】:javascript date getYear() returns different result between IE and Firefox, how to approach this?javascript date getYear() 在 IE 和 Firefox 之间返回不同的结果,如何解决这个问题?
【发布时间】:2011-08-11 09:50:54
【问题描述】:

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

【问题讨论】:

标签: javascript date browser-detection


【解决方案1】:

使用getFullYear() 而不是getYear()

【讨论】:

  • Firefox 正在完全按照规范所说的去做。
  • getYear 符合 y2k 标准,因为结果不限于两位数。例如,它将返回 2012 年的 112,而不是 12。这是一个 unixy 的东西。
【解决方案2】:

尝试使用 getFullYear() 代替 getYear

【讨论】:

  • 您的答案是第一个,但没有被标记为答案!当这种情况发生时我讨厌它......
  • 这很好 Mikey G... 因为目的始终是解决 OP 并分享经验/学习。 ;)
【解决方案3】:

如果 IE8 为您提供 2011,这是 IE8 中的一个错误(以及更早版本,请参阅下面的更新)getYearthe specification(B.2.4 节)中定义为:

  1. t成为这个时间值。
  2. 如果 tNaN,则返回 NaN
  3. 返回YearFromTime(LocalTime(t)) − 1900

因此,现在 111 是正确的值。该定义与第 3 版相比没有变化,因此我们谈论的是大约 12 年的特定行为。

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


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

【讨论】:

  • 非常有趣.. 是的,它在 IE8 上给了我 2011 年
【解决方案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;
}

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

【讨论】:

    【解决方案5】:

    使用 date.getFullYear();

    blah.. 至少要回答 30 个字符...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-03
      • 2012-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-06
      • 2021-05-31
      相关资源
      最近更新 更多