답변:
에서 사양, §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))를 얻을 수 있습니다.
Date.UTC(-271821, 3, 20)
반환합니다 -8640000000000000
. :-)
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
보시다시피 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