[javascript] 최소 및 최대 날짜

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

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

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



답변

에서 사양, §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))를 얻을 수 있습니다.


답변

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


답변