2012-01-14 14 views
9

Đây là thấp như tôi có thể dường như đi với ngày javascript:Bạn có thể tạo ngày thấp hơn 271800 trước Công nguyên không? Giống như thời gian khủng long?

var myDate = new Date(0, 0, 1); 
myDate.setFullYear("-271800"); 
alert(myDate); 

Bất cứ điều gì thấp hơn -271.800 BC ném một lỗi ngày không hợp lệ. Chúng ta có thể quay lại hàng triệu năm không? Hay một tỷ? Đối tượng ngày tháng có thể cho phép bạn mô tả bất kỳ ngày nào vô hạn trong quá khứ hay tương lai không? Làm thế nào tôi có thể làm một cái gì đó như thế này?

+0

Xin lỗi - ý tôi là BC trong dòng chủ đề! Não hôm nay rán. –

+2

tại sao bạn muốn làm điều đó? –

+0

Không có điều gì vô hạn khi bạn nói về máy tính, luôn có một con số đại diện cho điều đó. Có vẻ như các chàng trai Javascript nghĩ rằng -271800 có vẻ như xa trong thời gian. Bạn có thể tiếp cận quản lý thời gian này với lớp học của riêng bạn để mô tả ngày tháng xa trong thời gian có thể là – guiman

Trả lời

10

Đại diện cho một ngày cụ thể cách đây một triệu năm đánh tôi là vô nghĩa. Lịch Julian? Ngày trong tuần có nên tôn vinh hệ thống Babylonian không?

Tạo loại của riêng bạn cho điều này, quyết định những gì bạn thực sự cần đại diện.

--- Đã cập nhật: Điều này đã được chấp nhận, vì vậy tôi sẽ thêm một vài bit cụ thể hơn. ---

Như đã đề cập trong câu trả lời khác, theo EcmaScript spec, pg 164 of the fifth edition (liên kết là một .pdf.)

Thời gian được đo bằng ECMAScript trong mili giây kể từ 1 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. Mã số ECMAScript có thể đại diện cho tất cả các số nguyên từ –9,007,199,254,740,991 đến 9,007,199,254,740,991; phạm vi này đủ để đo lường thời gian 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, chuyển tiếp hoặc lùi, từ ngày 01 tháng 1 năm 1970 UTC.

Phạm vi thực tế của lần hỗ trợ bởi ECMAScript đối tượng ngày là hơi nhỏ: chính xác -100.000.000 ngày đến 100.000.000 ngày đo liên quan đến nửa đêm vào lúc bắt đầu ngày 1 tháng 1 năm 1970 UTC. Điều này cung cấp khoảng 8.640.000.000.000 mili giây đến hai bên của ngày 01 tháng 1 năm 1970 UTC.

Nhưng, đây là ngày lý thuyết. Nó bỏ qua một vài phần của thực tế. Ngày ngắn hơn (khoảng 12 giây) một triệu năm trước, do đó, một số phép tính JavaScript sẽ không chính xác. Các ngày trong tuần đã được xác định với các hệ thống khác nhau. Các tháng đã được xác định khác nhau. Tất cả để nói, quyết định những gì bạn thực sự cần phải đại diện.

+0

Vâng - suy nghĩ về cách xây dựng bộ chọn ngày/giờ phổ biến khá phức tạp khi bạn nghĩ về nó. Sự trở lại trong thời gian tới, những ngày càng ngắn hơn. Nó chỉ có thể là cần thiết để giảm độ chính xác xuống đến một năm trên một số ngưỡng. Thời gian cũng liên quan đến vị trí. Ngày dài hơn một chút trên Sao Diêm Vương. –

1

Theo https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date:

Ngày Javascript được đo bằng mili giây kể từ nửa đêm 01 tháng Một, 1970 UTC. Một ngày giữ 86.400.000 mili giây. JavaScript Phạm vi đối tượng ngày là -100.000.000 ngày đến 100.000.000 ngày liên quan đến 01 tháng 1 năm 1970 UTC.

Đối tượng Ngày JavaScript cung cấp hành vi thống nhất trên các nền tảng.

Tài nguyên là hữu hạn và nhà phát triển phải thỏa hiệp giữa lưu trữ, hiệu suất và phạm vi cho bất kỳ loại dữ liệu nhất định nào. IMHO phạm vi ecmascript cho các ngày là đủ lớn cho bất kỳ vấn đề thực tế.

+0

Có rất nhiều lý do hợp lệ và thiết thực để quay trở lại hơn 250 năm và muốn sự đơn giản của một đối tượng "được thử nghiệm bản địa/tài liệu". Câu hỏi OP cho biết nếu ngày không thể làm điều đó, những gì có thể. –

+0

@AaronSherman: Bạn có quan tâm đến việc nêu tên một số lý do thực tế không? Câu hỏi trung thực, với trí tuệ ngớ ngẩn của tôi, tôi không thể tưởng tượng tại sao lịch hiện tại của chúng tôi lại quan trọng cho một sự kiện xảy ra ở giữa thời kỳ đồ đá cũ. –

+0

ứng dụng web dòng thời gian là những gì bạn quan tâm. Tôi nhận ra có rất nhiều giải pháp khác hơn là một datetime tinh khiết, nhưng có khả năng dễ dàng mở rộng từ thời kỳ đồ đá đến thời hiện đại thực sự là khá tốt đẹp. Thời hạn ví dụ với vấn đề này: http://scholarslab.org/research-and-development/parsing-bc-dates-with-javascript/ và https://github.com/NUKnightLab/TimelineJS/issues/273 –

3

Tiêu chuẩn ECMAScript yêu cầu đối tượng Ngày có thể biểu thị bất kỳ ngày tháng và thời gian nào, tính bằng mili giây, trong vòng 100 triệu ngày trước hoặc sau 1/1/1970.Đây là một phạm vi cộng hoặc trừ 273,785 năm. Để đại diện cho các ngày bên ngoài phạm vi này, bạn sẽ cần triển khai đối tượng ngày của riêng bạn mà không hoạt động trên độ phân giải mili giây.

+0

Cảm ơn Dylan - đây là thông tin VERY - cảm ơn sự thật! –

3

Bạn nên tạo DateTime của riêng mình cho điều đó. Nó phức tạp phụ thuộc vào những gì bạn muốn đạt được ... nếu bạn muốn đại diện cho chỉ năm, sau đó nó chỉ là một số đơn giản ... nếu bạn muốn nói ngày tháng là chủ nhật cuối cùng trong 1 200 000 BC, nó là nhiều hơn phức tạp ... nhưng hãy nhớ rằng các ngày chủ nhật không tồn tại trong năm đó) ... Lịch Gregorian mà chúng tôi sử dụng hiện nay được giới thiệu vào năm 1582 AD, Julian lịch 45 TCN (và tôi không biết trước đó là gì). Tôi không nghĩ rằng ngay cả javascript DateTime đưa vào tài khoản đó, do đó, thiết lập nó đến năm 271800 BC không có ý nghĩa.

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