2012-07-17 40 views
87

Tôi đã tự hỏi đó là tối thiểu và ngày tối đa cho phép đối tượng Javascript Date. Tôi thấy rằng ngày tối thiểu là 200.000 b.C., nhưng tôi không thể nhận được bất kỳ tài liệu tham khảo về nó.Ngày tối thiểu và tối đa

Có ai biết câu trả lời không? Tôi chỉ hy vọng rằng nó không phụ thuộc vào trình duyệt.

Câu trả lời trong "thời gian epoch" (= mili giây từ 1970-01-01 00:00:00 UTC + 00) sẽ là tốt nhất.

+0

Đối với một câu trả lời copy/paste: http://stackoverflow.com/questions/27093130/how-to-get-the-minimum-and-maximum-date – Kieveli

Trả lời

129

Từ the spec, §15.9.1.1:

Một đối tượng Date chứa một số chỉ một khoảnh khắc đặc biệt trong thời gian tới trong vòng một phần nghìn giây. Số như vậy được gọi là giá trị thời gian. Giá trị thời gian cũng có thể là NaN, chỉ ra rằng đối tượng Date không đại diện cho một khoảng thời gian cụ thể.

Thời gian được đo bằng ECMAScript theo mili giây kể từ ngày 01 tháng 1 năm 1970 UTC. Trong thời gian giá trị nhảy vọt giây được bỏ qua. Giả sử rằng có chính xác 86.400.000 mili giây mỗi ngày. Giá trị số ECMAScript có thể đại diện cho tất cả các số nguyên từ –9,007,199,254,740,992 đến 9,007,199,254,740,992; phạm vi này đủ để đo lường chính xác đến mili giây cho bất kỳ khoảnh khắc nào trong khoảng 285,616 năm, hoặc chuyển tiếp hoặc lùi, từ ngày 01 tháng 1 năm 1970 UTC.

Phạm vi thời gian thực tế được hỗ trợ bởi các đối tượng Ngày ECMAScript hơi nhỏ hơn: chính xác -100.000.000 ngày đến 100,000,000 ngày được đo tương đối so với nửa đêm vào đầu ngày 01 tháng 1 năm 1970 UTC. Điều này cho một loạt 8,640.000.000.000 mili giây cho hai bên của 01 tháng 1 năm 1970 UTC.

Thời điểm chính xác của nửa đêm vào đầu ngày 01 tháng 1 năm 1970 UTC được biểu thị bằng giá trị +0.

Đoạn thứ ba là phù hợp nhất. Dựa trên đoạn đó, chúng tôi có thể có được ngày sớm nhất chính xác cho mỗi thông số kỹ thuật từ new Date(-8640000000000000), thứ ba, ngày 20 tháng 4, 271,821 BCE (BCE = Trước Common Era, ví dụ: năm -271,821).

+8

Tôi đoán Điều đó sẽ là đủ cho hầu hết các trường hợp ... :) –

+62

Bây giờ tôi hy vọng rằng ai đó sẽ không nghĩ rằng thế giới sẽ kết thúc vào ngày 13 tháng 9, 275760 ... – MaxArt

+11

@MaxArt Đó sẽ là sinh nhật 275745 của tôi, vì vậy tôi chắc chắn hy vọng không ! –

12

Để tăng thêm câu trả lời của T.J., vượt quá giá trị tối thiểu/tối đa sẽ tạo Ngày không hợp lệ.

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

Các vấn đề liên quan