为什么这个javascript会返回108而不是2008?它得到的日期和月份正确但不是一年?
myDate = new Date(); year = myDate.getYear();
年= 108?
这是一个Y2K的事情,只计算自1900年以来的年份.
现在有一些潜在的兼容性问题getYear()
已被弃用getFullYear()
- 来自quirksmode:
为了使问题更复杂,现在不推荐使用date.getYear(),你应该使用date.getFullYear(),而旧版浏览器不支持date.getFullYear().但是,如果它有效,它应该总是给出全年,即.2000而不是100.
您的浏览器使用以下两种方法提供以下年份:
* The year according to getYear(): 108 * The year according to getFullYear(): 2008
Internet Explorer和Firefox之间也存在实现差异,因为IE的实现getYear()
更改为行为getFullYear()
- 来自IBM:
根据ECMAScript规范,getYear返回年份减去1900,最初意味着返回1998年的"98".在ECMAScript版本3中不推荐使用getYear并将其替换为getFullYear().
Internet Explorer将getYear()更改为getFullYear(),并使其符合Y2k标准,而Mozilla保持标准行为.
由于getFullYear在旧版浏览器中不起作用,您可以使用以下内容:
Date.prototype.getRealYear = function() { if(this.getFullYear) return this.getFullYear(); else return this.getYear() + 1900; };
Javascript原型可用于扩展现有对象,就像C#扩展方法一样.现在,我们可以这样做;
var myDate = new Date(); myDate.getRealYear(); // Outputs 2008
检查文档.这不是Y2K问题 - 缺少Y2K问题!这个决定最初是在C中完成的,并被复制到Perl中,显然是JavaScript,可能还有其他几种语言.很久以前,显然仍然觉得使用两位数的年份仍然是可取的,但是设计这个界面的任何人都有足够的预见意识到他们需要考虑2000年及以后会发生什么,所以不要只提供最后两个数字,他们提供了自1900年以来的年数.如果你匆忙或想要冒险,你可以使用两位数.或者,如果您希望程序继续工作,您可以在结果中添加100并使用完整的四位数年份.
我记得第一次在Perl中进行日期操作.奇怪的是,我阅读了文档.显然这不是常见的事情.一年或两年后,我于1999年12月31日被召入办公室,修复了在一些合同Perl代码中最后可能发现的错误,这些错误我从未与之有任何关系.这是一个确切的问题:自1900年以来标准日期调用返回了几年,程序员将其视为两位数的年份.(他们假设他们在2000年会得到"00".)作为一个年轻的没有经验的程序员,我心里想到我们为"专业"工作付了那么多额外费用,那些人甚至都不愿意阅读文档.这是多年幻灭的开始; 现在我老了,愤世嫉俗.:)
在2000年,年度YAPC Perl会议被称为"YAPC 19100",以纪念这个经常报道的非bug.
如今,至少在Perl世界中,使用标准模块进行日期处理更有意义,使用真正的四位数年份.不确定JavaScript可用的内容.
它必须返回自1900年以来的年数.