为什么Javascript getYear()返回108?
为什么这个JavaScript返回108而不是2008? 它得到的date和月份正确,但不是一年?
myDate = new Date(); year = myDate.getYear();
年= 108?
这是2000年的事情,只有1900年以后才算。
现在有一些潜在的兼容性问题, getYear()
已经被弃用,取而代之的是getFullYear()
– 来自quirksmode :
为了使事情变得更加复杂,date.getYear()现在已经被弃用了,你应该使用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”。getYear在ECMAScript版本3中被弃用,并被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
检查文档。 这不是千年虫问题 – 这是缺乏千年虫问题! 这个决定最初是用C编写的,被复制到Perl中,显然是JavaScript,可能还有其他几种语言。 很久以前,使用两位数年份显然还是可取的,但是devise这个接口的人有足够的预见意识到他们需要考虑2000年及以后会发生什么事情,所以不要只提供最后两个数字,他们提供了自1900年以来的年数。如果您匆忙或想冒险,可以使用两位数字。 或者如果你想让你的程序继续工作,你可以增加100个结果,并使用全面的四位数年份。
我记得我第一次在Perl中进行date操作。 奇怪的是我读了文档 。 显然这不是一件普通的事情。 一两年后,我于1999年12月31日被调到办公室,修复了一些合同Perl代码中最后一刻发现的错误,这些东西我从来没有任何关系。 这是一个确切的问题:自1900年以来,标准date调用返回,程序员将其视为两位数的年份。 (他们认为他们在2000年会得到“00”)作为一个没有经验的年轻程序员,这让我觉得我们为了一份“专业”工作付出了额外的代价,而那些人甚至没有打扰过文档。 这是多年幻灭的开始; 现在我老了,玩世不恭。 🙂
在2000年,YAPC年度Perl会议被称为“YAPC 19100”,以纪念这个经常被报道的非bug。
现在,至less在Perl世界中,使用标准模块进行date处理更合理,而使用真正的四位数年份。 不知道什么可用于JavaScript。
它必须返回自1900年以来的年数。
使用date.getFullYear()
。
这(正如其他地方所指出的)是千年虫的事情。 Netscape(2000年以前编写)最初返回,例如getYear()
98
。 而不是返回到00
,而是2000年返回100
然后其他浏览器来了,做了不同的事情,每个人都不满,因为不兼容。
后来的浏览器支持getFullYear
作为返回完整年份的标准方法。
正如指出的那样,您应该从不使用getYear()
,而是使用getFullYear()
。
然而,这个故事并不像IE那样以getFullYear()
实现GetYear()
,Opera和IE这几天把getYear()
当作getYear()
最初是为2000年之前的date指定的,但是将其视为getFullYear()
2000年以后,而webkit和Firefox则坚持旧的行为
这在所有浏览器中输出99:
javascript:alert(new Date(917823600000).getYear());
这在FF / WebKit中输出108,在Opera / IE中输出为2008:
javascript:alert(new Date().getYear());
这是愚蠢的。 它的历史可以追溯到2000年以前 ,现在只是因为遗留原因而返回1900年以来的年数。 使用getFullYear()来获得实际的年份。
这个问题太古老了,让我为networking时代的怀旧而哭泣!
没错,Date.getYear()返回自1900年以来的年数,就像Perl的localtime()一样。 人们想知道为什么在20世纪90年代devise的语言不能解释世纪stream失,但我能说什么呢? 你必须在那里。 这种感觉在当时是有道理的(像pets.com那样)。
在2000年之前,可能会试图通过在getYear()的结果后面加上“19”来解决这个bug,从而导致“19100年的bug” 。 其他人已经充分回答了这个问题(将getDate()的结果添加到1900)。
也许你正在阅读JavaScript的书有点老了?
感谢从过去的爆炸!
我正在使用date.getUTCFullYear()
; 工作没有问题。
你得到的数字是自1900年以来的年数。不要问我为什么。
现在正在返回四位数–1900年,这可能在9年前就已经很酷了,但现在已经非常缓慢了。 Java的java.util.Date也是这样做的。
正如其他人所说的,它会返回自1900年以来的年数。之所以这样做,是因为当JavaScript在90年代中期发明时,这种行为既方便又和其他语言中的date时间API一致。 特别是C.当然,一旦APIbuild立起来,由于向后兼容的原因,它们不能改变它。
顺便说一句,不同的浏览器可能会返回不同的结果,所以最好完全跳过这个函数,并总是使用getFullYear()。
var date_object = new Date(); var year = date_object.getYear(); 如果(年<2000){年=年+ 1900; } / /你会得到整整一年….