为什么Javascript getYear()返回108?

javascript date

42968 观看

14回复

12616 作者的声誉

为什么此javascript返回108而不是2008?它得到正确的日期和月份,但不正确的年份?

myDate = new Date();
year = myDate.getYear();

年= 108?

作者: ctrlShiftBryan 的来源 发布者: 2008 年 9 月 18 日

回应 (14)


6

132623 作者的声誉

它必须返回自1900年以来的年数。

作者: Jeremy Ruten 发布者: 18.09.2008 11:55

0

67573 作者的声誉

您得到的数字是自1900年以来的年数。不要问我为什么。

作者: Nils Pipenbrinck 发布者: 18.09.2008 11:55

4

47416 作者的声誉

使用date.getFullYear()

(正如在其他地方正确指出的那样)这是一个千年虫问题。Netscape(写于2000年之前)最初是98从(例如)返回的getYear()。它没有返回00,而是返回100了2000年。然后其他浏览器出现并以不同的方式进行了处理,当不兼容盛行时,每个人都不满意。

后来的浏览器getFullYear作为返回完整年份的标准方法而受支持。

作者: Dan 发布者: 18.09.2008 11:55

-1

731 作者的声誉

它返回的是1900年的4位数年份,这可能在9年前就已经很酷了,但是现在却相当迟钝。Java的java.util.Date也可以做到这一点。

作者: user17163 发布者: 18.09.2008 11:55

1

9561 作者的声誉

真傻 它的日期可追溯到2000年以前的日期,由于种种原因,现在仅返回自1900年以来的年数。使用getFullYear()获取实际年份。

作者: joelhardi 发布者: 18.09.2008 11:58

0

8589 作者的声誉

正如其他人所说,它返回自1900年以来,为什么它的原因的年数是,当在JavaScript的90年代中期被发明,这种行为是既方便又与其他语言的日期时间的API是一致的。特别是C。当然,一旦建立了API,由于向后兼容的原因,它们将无法更改它。

作者: user11318 发布者: 18.09.2008 11:58

127

36029 作者的声誉

决定

这是一个Y2K问题,仅计算自1900年以来的年份。

现在有潜在的兼容性问题getYear(),取而代之的被弃用getFullYear()-从怪异模式

为了使事情变得更加复杂,如今不建议使用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保留了标准行为。

作者: ConroyP 发布者: 18.09.2008 11:58

0

35777 作者的声誉

顺便说一句,不同的浏览器可能会返回不同的结果,因此最好完全跳过此函数,并始终使用getFullYear()。

作者: Milan Babuškov 发布者: 19.09.2008 12:03

25

119790 作者的声誉

由于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
作者: FlySwat 发布者: 19.09.2008 12:12

3

4421 作者的声誉

这个问题太老了,让我在互联网泡沫时期怀旧而哭泣!

没错,Date.getYear()返回自1900年以来的年数,就像Perl的localtime()一样。有人想知道为什么1990年代设计的语言不能说明世纪的营业额,但是我能说什么呢?你必须在那里。这在当时有点意义(就像pets.com一样)。

在2000年之前,可能会尝试通过在getYear()的结果后附加“ 19”来产生“ 19100年bug”来修复此bug 。其他人已经充分回答了这个问题(将getDate()的结果添加1900)。

您正在阅读的有关JavaScript的书也许有点旧了?

感谢过去的爆炸!

作者: jjohn 发布者: 19.09.2008 12:22

11

41264 作者的声誉

检查文档。这不是千年虫问题-缺少千年虫问题!这个决定最初是用C语言做出的,然后被复制到Perl,显然是JavaScript以及其他几种语言中。很久以前,显然仍然希望使用两位数的年份,但是值得注意的是,设计该界面的人都具有足够的前瞻性,意识到他们需要考虑2000年及以后的情况,因此,不仅仅提供最后的两年数字,它们提供了自1900年以来的年数。如果您急于要冒险,可以使用两位数字。或者,如果您希望程序继续运行,则可以将结果加100,并使用完整的四位数年份。

我记得我第一次在Perl中进行日期操作。奇怪的是,我看了看文档。显然,这不是普通的事情。一两年后,我于1999年12月31日被要求进入办公室,以修复在某个合同Perl代码中可能在最后一分钟发现的错误,这是我从未涉及的东西。正是这个问题:标准日期调用返回了自1900年以来的年份,而程序员将其视为两位数的年份。(他们认为他们在2000年会获得“ 00”。)作为一个年轻的缺乏经验的程序员,我大为震惊,因为我们为“专业”工作付出了很多额外的钱,而那些人甚至都不花心思去阅读。文档。这是幻灭多年的开始;现在我老了,愤世嫉俗。:)

在2000年,为了纪念这个经常报告的非bug,每年的YAPC Perl会议都被称为“ YAPC 19100”。

如今,至少在Perl世界中,使用标准模块进行日期处理更为有意义,该模块使用实际的四位数年份。不知道什么可能适用于JavaScript。

作者: skiphoppy 发布者: 19.09.2008 12:42

2

3252 作者的声誉

如您所指出的,您永远不要使用getYear(),而应该使用getFullYear()

但是,这个故事并不像“ IE实施GetYear()getFullYear()。如今,Opera和IE getYear()按照getYear()最初为2000年之前的日期所指定的那样对待,但是将其与getFullYear()2000年之后的日期一样对待,而webkit和Firefox则遵循旧的行为。

在所有浏览器中输出99:

javascript:alert(new Date(917823600000).getYear());

在FF / WebKit中输出108,在Opera / IE中输出2008:

javascript:alert(new Date().getYear());
作者: Arve 发布者: 19.09.2008 09:46

0

0 作者的声誉

var date_object = new Date(); var year = date_object.getYear(); if(年<2000){年=年+ 1900; } // u将获得完整的一年。

作者: vinoth 发布者: 25.11.2008 07:03

1

11 作者的声誉

我在用date.getUTCFullYear(); 工作没有问题。

作者: D3vito 发布者: 10.08.2010 09:26
32x32