2008-09-18 4 views

답변

113

그것은 Y2K 일이며, 1900 년 이후로 계산됩니다.

잠재적 인 호환성 문제는 getYear()getFullYear() 찬성에서 사용되지 이니까 있습니다 - quirksmode에서 :

훨씬 더 복잡한 문제는, date.getYear()는 현재 지원되지 않습니다하려면 당신이 날짜를 사용한다 .getFullYear()는 이전 브라우저에서 지원하지 않습니다. 그러나 그것이 효과가 있다면, 항상 1 년을 말해야합니다. 2000 대신 100

의 브라우저가 이러한 두 가지 방법으로 다음과 같은 년을 제공합니다

* The year according to getYear(): 108 
* The year according to getFullYear(): 2008 

getYear()의 IE의 구현처럼 행동하도록 변경되면서 인터넷 익스플로러와 파이어 폭스 간의 구현 차이가있다 getFullYear()-IBM에서 : ECMA 스크립트 사양에 따라

, getYear는 1900 년 마이너스 년 반환, 원래 GE의 1998 년은 "98"를 반환하는 의미 tYear는 ECMAScript 버전 3에서 사용되지 않으며 getFullYear()로 대체되었습니다.

Internet Explorer는 getYear()를 getFullYear()와 같은 방식으로 변경하고 Y2k 호환으로 변경했으며 Mozilla는 표준 동작을 유지했습니다.

6

은 .. 1900 년

0

당신이 얻을 수는 왜 안 함 1900 년 이후 년의 수 때문에

3

사용 date.getFullYear()을 년의 수를 반환해야합니다.

이것은 (다른 곳에서 지적한 바와 같이) Y2K 것입니다. Netscape (2000 이전에 작성)은 원래 getYear()에서 98과 같이 반환되었습니다. 00으로 돌아가는 대신 2000 년에 100을 반환했습니다. 그런 다음 다른 브라우저가 와서 다르게 수행했으며 모든 사람들이 비호 환성으로 인해 불행했습니다.

나중에 연도를 반환하는 표준 방법으로 getFullYear을 지원하는 브라우저가 지원됩니다.

0

1900 년 4 자리수를 반환합니다. 이는 9 년 전에는 시원했지만 지금은 꽤 지체되어 있습니다. Java의 java.util.Date에서도이 작업을 수행합니다.

1

벙어리입니다. 그것은 dates to pre-Y2K days이며, 이제는 유산 때문에 1900 년 이후의 연수를 반환합니다. 실제 연도를 가져 오려면 getFullYear()를 사용하십시오.

다른 사람들이 말했듯이
0

, 그것은 1900 년이 자바 스크립트가 90 년대 중반에 발명되었을 때, 그 행동이 편리하고 날짜 - 시간의 API와 일치 둘 것을입니다 것을 않는 이유부터 년간의 수를 반환 다른 언어로. 특히 C. 그리고 일단 API가 설립되면 이전 버전과의 호환성을 위해 API를 변경할 수 없었습니다.

0

현재 브라우저마다 다른 결과가 표시 될 수 있으므로이 기능을 건너 뛰고 getFullYear()를 항상 사용하는 것이 좋습니다. 하여 getFullYear는 이전 버전의 브라우저에서 작동하지 않기 때문에

23

,이 같은 것을 사용할 수 있습니다

Date.prototype.getRealYear = function() 
{ 
    if(this.getFullYear) 
     return this.getFullYear(); 
    else 
     return this.getYear() + 1900; 
}; 

자바 스크립트의 프로토 타입은 많은 C# 확장 방법처럼, 기존 개체를 확장하는 데 사용할 수 있습니다. 이제 우리는 이것을 할 수 있습니다.

var myDate = new Date(); 
myDate.getRealYear(); 
// Outputs 2008 
+7

아마도 Date.prototype.getRealYear = date.prototype.getFullYear와 같을 수도 있습니다. Date.prototype.getFullYear : function() { return this.getYear() + 1900; }; –

1

이 질문은 너무 오래되어서 닷컴 타임에 대한 향수를 불러 일으 킵니다.

맞습니다. Date.getYear()는 Perl의 localtime()과 마찬가지로 1900 년 이후의 연도 수를 반환합니다. 1990 년대에 설계된 언어가 세기 매출액을 설명하지 않는 이유가 무엇인지 궁금해합니다. 그러나 무엇을 말할 수 있습니까? 당신은 거기에 있어야했습니다. 그것은 당시 일종의 감각을 만들었습니다 (pets.com처럼).

2000 년 이전에는 getYear() 결과에 "19"를 추가하여 "year 19100 bug"이되도록이 버그를 해결하려고 시도했을 수 있습니다. 다른 사람들은 이미이 질문에 충분히 답했습니다 (getDate()의 결과에 1900을 더하십시오).

자바 스크립트에 대해 읽고있는 책이 조금 오래되었을 가능성이 있습니까?

과거로부터의 폭발에 감사드립니다!

+0

언어 (Perl)가 그 이유를 설명하지 않은 이유는 훨씬 이전에 만들어진 C 디자인 결정을 맹목적으로 복사했기 때문입니다. (20 년?) – skiphoppy

9

문서를 확인하십시오. Y2K 문제가 아닙니다. Y2K 문제가 없습니다. 이 결정은 원래 C 언어로 만들어졌으며 Perl, 분명히 JavaScript 및 기타 여러 언어로 복사되었습니다. 오래 전에 2 자리 연도를 사용하는 것이 바람직하다고 느껴졌지 만, 그 인터페이스를 설계 한 사람은 누구나 2000 년 이후에 일어날 일에 대해 생각할 필요가 있음을 깨닫기에 충분한 고려가 있었기 때문에 마지막 두 가지를 제공하는 대신 숫자는 1900 년 이래로 여러 해를 제공합니다. 서둘러 있거나 위험 해지고 싶다면 두 자릿수를 사용할 수 있습니다. 또는 프로그램을 계속 작동 시키려면 결과에 100을 더하고 본격적인 4 자리 연도를 사용할 수 있습니다.

Perl에서 날짜 조작을 처음 수행 한 것을 기억합니다. 이상하게도 충분히 문서를 읽으십시오. 분명히 이것은 공통점이 아닙니다. 몇 년이 지난 1999 년 12 월 31 일 필자는 어떤 계약 용 Perl 코드에서 마지막 순간에 발견 된 버그를 수정하기 위해 사무실에 전화를 걸었습니다. 이 정확한 쟁점이었습니다 : 표준 날짜 호출은 1900 년 이래로 몇 년을 돌려 주었고, 프로그래머는 이것을 2 자리 연도로 취급했습니다. (그들은 2000 년에 "00"을 얻을 것이라고 생각했습니다.) 경험이 부족한 젊은 프로그래머로서 "전문적인"직무를 위해 많은 돈을 지불 했었고 그 사람들은조차도 선적 서류 비치. 그것은 오랜 세월의 환멸의 시작이었습니다. 이제 나는 늙고 냉소적이다. :)

2000 년 YAPC Perl 컨퍼런스는이 버그가없는 버그를 기리기 위해 "YAPC 19100"이라고 지칭되었습니다.

요즘에는 Perl 세계에서 날짜 처리를위한 표준 모듈을 사용하는 것이 더 합리적입니다. 실제 날짜는 4 자리 연도를 사용하는 것입니다. 자바 스크립트에서 사용할 수있는 기능이 확실하지 않습니다.

+0

hehe ... Dilbert 만화를 떠올리게합니다 ... "Manual라는 스페인어 사람에 대한 이야기를 읽었습니까?" ;) –

2

getYear()을 사용하지 말고 getFullYear()을 사용해야합니다.

이야기는, IE가. 오페라와 IE 요즘 getYear()getYear()으로 원래 2000 년 이전 날짜를 지정 취급하지만, 2000 년 이후 날짜에 대해 getFullYear()로 취급됩니다 GetYear()getFullYear()로 구현 "그러나 간단하지 않습니다 동안 웹킷과 파이어 폭스는 이전 동작을 고수

이 모든 브라우저에서 99 출력 : 오페라/IE에서

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

이 FF/웹킷에 (108)를 출력하고, 2008 :

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

var date_object = new Date(); var year = date_object.getYear(); if (연도 < 2000) { 연도 = 연도 + 1900; } // 1 년 내내 ...

1

나는 date.getUTCFullYear()을 사용하고 있습니다. 문제없이 작동합니다.

관련 문제