최소 및 최대 날짜


128

Javascript Date객체에 허용되는 최소 및 최대 날짜가 어느 것인지 궁금 합니다. 최소 날짜는 200000 BC와 같지만 그에 대한 참조를 얻을 수 없었습니다.

누구든지 답을 알고 있습니까? 브라우저에 의존하지 않기를 바랍니다.

"에포크 시간"(= 1970-01-01 00:00:00 UTC + 00에서 밀리 초)의 답변이 가장 좋습니다.


복사 / 붙여 넣기 답변 : stackoverflow.com/questions/27093130/…
Kieveli

답변:


177

에서 사양, §15.9.1.1 :

Date 객체에는 밀리 초 이내의 특정 순간을 나타내는 Number가 포함되어 있습니다. 이러한 숫자를 시간 값이라고합니다. 날짜 값이 특정 시간 순간을 나타내지 않음을 나타내는 시간 값도 NaN 일 수 있습니다.

시간은 1970 년 1 월 1 일 UTC 이후 ECMAScript에서 밀리 초 단위로 측정됩니다. 시간 값에서 윤초는 무시됩니다. 하루에 정확히 86,400,000 밀리 초가 있다고 가정합니다. ECMAScript 숫자 값은 –9,007,199,254,740,992에서 9,007,199,254,740,992까지의 모든 정수를 나타낼 수 있습니다. 이 범위는 1970 년 1 월 1 일부터 앞으로 또는 뒤로 약 285,616 년 내에있는 순간에 대해 밀리 초 단위의 정밀도를 측정하기에 충분합니다.

ECMAScript Date 객체가 지원하는 실제 시간 범위는 약간 작습니다. 1970 년 1 월 1 일 자정을 기준으로 정확히 –100,000,000 일에서 100,000,000 일이 측정되었습니다. 1970 년 1 월 1 일 UTC의 어느 쪽이든 8,640,000,000,000,000 밀리 초 범위입니다.

1970 년 1 월 1 일 시작일 자정의 정확한 순간은 +0 값으로 표시됩니다.

세 번째 단락이 가장 관련이 있습니다. 이 단락을 기반으로하여 스펙 당 가장 빠른 날짜 인 new Date(-8640000000000000)BCE 271,821 BCE (4 월 20 일 화요일) (BCE = Common Common Era 이전 ( 예 : -271,821))를 얻을 수 있습니다.


1
이것은 .net에서와 같이 isMin isMax 필드에 영감을주었습니다 ... gist.github.com/QueueHammer/cb9bf736b81029d65485fb30ad01918d
QueueHammer

1
그래서 그것이 -9223372036854775808L에서 작동하지 않는 이유입니다 ... 날짜로 변경 한 후에도 resever는 범위 값에서 양수를 반환합니다.
deadManN

1
나는 사람들이 무엇에 대해 불평하는지 모른다. 이것은 나에게 잘 작동한다. BTW 이것이 반대로 작동하는 방법이 있는지 궁금합니다 (예 : BCE 날짜를 입력하고 획기적인 초를 음수 정수로 표시)?
Mark Seagoe

1
@MarkSeagoe-를 Date.UTC(-271821, 3, 20)반환합니다 -8640000000000000. :-)
TJ Crowder 2019

새로운 날짜 ( '275760-9-13 05:30:00')
AshTyson

52

TJ의 답변을 늘리려면 최소 / 최대 값을 초과하면 유효하지 않은 날짜가 생성됩니다.

let maxDate = new Date(8640000000000000);
let minDate = new Date(-8640000000000000);

console.log(new Date(maxDate.getTime()).toString());
console.log(new Date(maxDate.getTime() - 1).toString());
console.log(new Date(maxDate.getTime() + 1).toString()); // Invalid Date

console.log(new Date(minDate.getTime()).toString());
console.log(new Date(minDate.getTime() + 1).toString());
console.log(new Date(minDate.getTime() - 1).toString()); // Invalid Date


-8

보시다시피 01/01/1970은 0을 반환합니다. 이는 가능한 최저 날짜임을 의미합니다.

new Date('1970-01-01Z00:00:00:000') //returns Thu Jan 01 1970 01:00:00 GMT+0100 (Central European Standard Time)
new Date('1970-01-01Z00:00:00:000').getTime() //returns 0
new Date('1970-01-01Z00:00:00:001').getTime() //returns 1

9
당신의 대답의 요점은 무엇입니까? 원래 질문에 어떻게 대답합니까?
MaxArt

1/1/1970은 가능한 최저 날짜가 아닙니다. 1/1/1970 이전의 날짜를 얻기 위해 음수를 전달할 수 있습니다.
inejwstine
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.