2011-10-03 1 views
4

다양한 구현에서 JavaScript 날짜 객체의 혼합 값/최대 값에 대한 정보를 읽습니다.JavaScript Date 객체의 전체 범위는 무엇입니까?

Mozilla 문서는 JavaScript가 UNIX 신기원의 "-100,000,000 days to +100,000,000"을 지원한다고 말합니다. 내 수학이 정확하다면, 이것은 양쪽에 8.64e15 ms가되어야합니다.

Microsoft MSDN은 JSCript가 UNIX 신기원의 "approximately 285,616 years"을 지원한다고 말합니다.

Google v8의 단위 테스트는 신기원에서 +/-1e8 days을 나타냅니다.

인 ECMAScript 5.1 specifies a little more clearly은 :

시간 1970년 1월 1일 UTC부터의 시간, 밀리 초 ECMAScript를 측정됩니다. 시간 값에서 윤년은 무시됩니다. 정확히 하루에 86400,000 밀리 초가 있다고 가정합니다. ECMAScript Number 값은 -9,007199254740,992에서 9,007199254740,992까지의 모든 정수를 나타낼 수 있습니다. 이 범위는 UTC 1970 년 1 월 1 일부터 약 285,616 년 (앞으로 또는 뒤로) 내에있는 모든 순간에 대해 밀리 초 정밀도로 시간을 측정하는 데 충분합니다.

ECMAScript를 날짜 객체가 지원하는 배의 실제 범위는 입니다 약간 작은 : 1970년 1월 1일 UTC의 시작 부분에 자정을 기준으로 측정 1억일 정확히 -100,000,000 일. 이는 1970 UTC에게 01 월 어느 한쪽을 8,640000000000000 (밀리 초)의 범위를 제공

나는 사람이 실제로 "시대에서 +/- 1E8 일"이 지원하지 않는 어떤 구현을 알 수 있을까, 궁금 해요 범위?

+1

당신이 숙고하고있는 응용 프로그램을 배우는 것은 매우 중요합니다.이 세부 사항이 중요 할 것입니다 :-) – Pointy

+1

그는 플럭스 커패시터 애플리케이션을 작성하고 있습니다. –

+0

내가이 미끄러운 & 싱크 가장자리에 내 머리를 친 후에이 재미있는 생각을했습니다. – mckamey

답변

2

나는 그런 구현이 현재 사용되고 있는지 의심 스럽다. 정수 범위를 지원하면 날짜 범위를 지원할 이유가 없습니다. 그리고 그 정수 범위는 js의 Number 유형의 다른 요구 사항의 부작용입니다 (표준의 8.5 참조, Number는 기본적으로 IEEE 754입니다). 그래서 모든 종류의 패키지입니다. 의미가, 그러한 구현이 있었다면, 그들은 대부분 올바른 방식으로 Number를 구현하지 않을 가능성이 매우 높습니다.

+0

이것은 좋은 지적입니다. 다양한 구현 기술이 정렬되지 않았기 때문에 나는 그것을 의심하기 시작했습니다.MSDN 설명이 ECMA의 첫 번째 단락으로 사용 된 반면 다른 단원은 2 번째 단락이되었다고 생각됩니다. – mckamey

+1

Chrome 14, FF2, FF7, IE7, IE9, Safari 5.1, Opera 11.51이이 QUnit 테스트를 통과했습니다. https://gist.github.com/1265065 – mckamey

4

이 모든 주요 버전의 브라우저에서 작동합니다

var d = new Date(); 
d.setTime(8640000000000000); 
document.write(d); 

결과 :

금 9월 12일 275760 그리니치 표준시 20시 00분 0초-0400 (동부 서머 타임)

이 작동하지 않습니다 :

d.setTime(8640000000000001); 

IE7/WinXP에서 js 오류가 발생합니다.