Why does Javascript getYear() return 108?为什么此javascript返回108而不是2008? 它得到正确的日期和月份,但没有年份?
年= 108? 这是一个Y2K问题,仅计算自1900年以来的年份。
现在已经存在潜在的兼容性问题,因为已弃用了
Internet Explorer和Firefox之间也存在实现差异,因为IE的
由于getFullYear在较旧的浏览器中不起作用,因此可以使用以下方法:
Javascript原型可用于扩展现有对象,就像C#扩展方法一样。现在,我们可以做到这一点;
检查文档。这不是千年虫问题-缺少千年虫问题!这个决定最初是用C语言做出的,然后被复制到Perl,显然是JavaScript以及其他几种语言中。很久以前,显然仍然希望使用两位数的年份,但是值得注意的是,设计该界面的人都具有足够的前瞻性,意识到他们需要考虑2000年及以后的情况,因此,不仅仅提供最后的两年数字,它们提供了自1900年以来的年数。如果您急于要冒险,可以使用两位数字。或者,如果您希望程序继续运行,则可以将结果加100,并使用完整的四位数年份。 我记得我第一次在Perl中进行日期操作。奇怪的是,我阅读了文档。显然,这不是普通的事情。一两年后,我于1999年12月31日被要求进入办公室,以修复在某个合同Perl代码中可能在最后一分钟发现的错误,这是我从未涉及的东西。正是这个问题:标准日期调用返回了自1900年以来的年份,而程序员将其视为两位数的年份。 (他们认为他们在2000年会获得" 00"。)作为一个年轻的,没有经验的程序员,我大为震惊,因为我们为"专业"工作付出了很多额外的钱,而那些人甚至都不花心思去阅读。文档。这是幻灭多年的开始;现在我老了,愤世嫉俗。 :) 在2000年,为了纪念这个经常报告的非bug,每年的YAPC Perl会议都被称为" YAPC 19100"。 如今,至少在Perl世界中,使用标准模块进行日期处理更为有意义,该模块使用实际的四位数年份。不知道什么可能适用于JavaScript。 它必须返回自1900年以来的年数。
使用
(正如在其他地方正确指出的那样)这是一个千年虫问题。 Netscape(在2000年之前编写)最初返回,例如从
后来的浏览器支持 这个问题太老了,让我在互联网泡沫时期怀旧而哭泣! 没错,Date.getYear()返回自1900年以来的年数,就像Perl的localtime()一样。有人想知道为什么1990年代设计的语言不能说明世纪的营业额,但是我能说什么呢?你必须在那里。这在当时有点意义(就像pets.com一样)。 在2000年之前,可能会尝试通过在getYear()的结果后附加" 19"(导致" 19100年错误")来修复此错误。其他人已经充分回答了这个问题(将getDate()的结果添加1900)。 您正在阅读的有关JavaScript的书也许有点旧了? 感谢过去的爆炸!
正如您指出的那样,切勿使用
但是,故事并不像" IE将 在所有浏览器中输出99:
在FF / WebKit中输出108,在Opera / IE中输出2008:
我正在使用 真傻它可以追溯到2000年以前的日期,由于种种原因,现在只返回自1900年以来的年数。使用getFullYear()获取实际年份。
var date_object = new Date(); 顺便说一句,不同的浏览器可能会返回不同的结果,因此最好完全跳过此函数,并始终使用getFullYear()。 正如其他人所说,它返回自1900年以来的年数。这样做的原因是,当JavaScript在90年代中期发明时,这种行为既方便又与其他语言的日期时间API一致。特别是C。当然,一旦建立了API,由于向后兼容的原因,他们将无法更改它。 您得到的数字是自1900年以来的年数。不要问我为什么。 它返回的是1900年的4位数年份,这可能在9年前就已经很酷了,但是现在却相当迟钝。 Java的java.util.Date也可以做到这一点。 |