왜이 javascript는 2008 대신에 108을 반환합니까? 그 날과 달은 맞지만 일년이 아니야?Javascript getYear()가 108을 반환하는 이유는 무엇입니까?
myDate = new Date();
year = myDate.getYear();
연도 = 108?
왜이 javascript는 2008 대신에 108을 반환합니까? 그 날과 달은 맞지만 일년이 아니야?Javascript getYear()가 108을 반환하는 이유는 무엇입니까?
myDate = new Date();
year = myDate.getYear();
연도 = 108?
그것은 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는 표준 동작을 유지했습니다.
은 .. 1900 년
당신이 얻을 수는 왜 안 함 1900 년 이후 년의 수 때문에
사용 date.getFullYear()
을 년의 수를 반환해야합니다.
이것은 (다른 곳에서 지적한 바와 같이) Y2K 것입니다. Netscape (2000 이전에 작성)은 원래 getYear()
에서 98
과 같이 반환되었습니다. 00
으로 돌아가는 대신 2000 년에 100
을 반환했습니다. 그런 다음 다른 브라우저가 와서 다르게 수행했으며 모든 사람들이 비호 환성으로 인해 불행했습니다.
나중에 연도를 반환하는 표준 방법으로 getFullYear
을 지원하는 브라우저가 지원됩니다.
1900 년 4 자리수를 반환합니다. 이는 9 년 전에는 시원했지만 지금은 꽤 지체되어 있습니다. Java의 java.util.Date에서도이 작업을 수행합니다.
벙어리입니다. 그것은 dates to pre-Y2K days이며, 이제는 유산 때문에 1900 년 이후의 연수를 반환합니다. 실제 연도를 가져 오려면 getFullYear()를 사용하십시오.
다른 사람들이 말했듯이, 그것은 1900 년이 자바 스크립트가 90 년대 중반에 발명되었을 때, 그 행동이 편리하고 날짜 - 시간의 API와 일치 둘 것을입니다 것을 않는 이유부터 년간의 수를 반환 다른 언어로. 특히 C. 그리고 일단 API가 설립되면 이전 버전과의 호환성을 위해 API를 변경할 수 없었습니다.
현재 브라우저마다 다른 결과가 표시 될 수 있으므로이 기능을 건너 뛰고 getFullYear()를 항상 사용하는 것이 좋습니다. 하여 getFullYear는 이전 버전의 브라우저에서 작동하지 않기 때문에
,이 같은 것을 사용할 수 있습니다
Date.prototype.getRealYear = function()
{
if(this.getFullYear)
return this.getFullYear();
else
return this.getYear() + 1900;
};
자바 스크립트의 프로토 타입은 많은 C# 확장 방법처럼, 기존 개체를 확장하는 데 사용할 수 있습니다. 이제 우리는 이것을 할 수 있습니다.
var myDate = new Date();
myDate.getRealYear();
// Outputs 2008
아마도 Date.prototype.getRealYear = date.prototype.getFullYear와 같을 수도 있습니다. Date.prototype.getFullYear : function() { return this.getYear() + 1900; }; –
이 질문은 너무 오래되어서 닷컴 타임에 대한 향수를 불러 일으 킵니다.
맞습니다. Date.getYear()는 Perl의 localtime()과 마찬가지로 1900 년 이후의 연도 수를 반환합니다. 1990 년대에 설계된 언어가 세기 매출액을 설명하지 않는 이유가 무엇인지 궁금해합니다. 그러나 무엇을 말할 수 있습니까? 당신은 거기에 있어야했습니다. 그것은 당시 일종의 감각을 만들었습니다 (pets.com처럼).
2000 년 이전에는 getYear() 결과에 "19"를 추가하여 "year 19100 bug"이되도록이 버그를 해결하려고 시도했을 수 있습니다. 다른 사람들은 이미이 질문에 충분히 답했습니다 (getDate()의 결과에 1900을 더하십시오).
자바 스크립트에 대해 읽고있는 책이 조금 오래되었을 가능성이 있습니까?
과거로부터의 폭발에 감사드립니다!
언어 (Perl)가 그 이유를 설명하지 않은 이유는 훨씬 이전에 만들어진 C 디자인 결정을 맹목적으로 복사했기 때문입니다. (20 년?) – skiphoppy
문서를 확인하십시오. 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 자리 연도를 사용하는 것입니다. 자바 스크립트에서 사용할 수있는 기능이 확실하지 않습니다.
hehe ... Dilbert 만화를 떠올리게합니다 ... "Manual라는 스페인어 사람에 대한 이야기를 읽었습니까?" ;) –
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());
var date_object = new Date(); var year = date_object.getYear(); if (연도 < 2000) { 연도 = 연도 + 1900; } // 1 년 내내 ...
나는 date.getUTCFullYear()
을 사용하고 있습니다. 문제없이 작동합니다.
아, 우리가 Y2K를 통과하기 위해 저지른 죄. – DGentry
'year = myDate.getFullYear() % 100; ' –