2009-10-22 9 views
10

Zakładając, że 32-bitowy system operacyjny/przeglądarka może utworzyć obiekt Date w rollover JavaScriptu do 1970, jeśli ustawię datę poza 2038?Czy obiekt daty JavaScript jest podatny na problem z Y2038?

Mówi się, że rok może być ustawiony na 9999, jednak nie wiem, czy jest to spójne we wszystkich implementacjach JavaScript, czy jest to dokładny opis tego, co dyktuje specyfikacja.

Myślę, że biorąc pod uwagę sformułowanie w dokumentacji, wygląda na to, że używa on 64-bitowego numeru do przechowywania czasu lub przechowywania rzeczywistych danych w formacie daty ISO.

Czy ktoś wie, jak to zaimplementować przeglądarki?

+0

Co stanie się, gdy spróbujesz? –

+1

Próbowałem, ale mam 64-bitowy system operacyjny, więc nie mogę być pewny, że wszystko, co robię, będzie odzwierciedlało to, co jest na ogół. –

Odpowiedz

17

nie powinien być - w zależności od ECMAScript specification seciont 15.9.1.1:

Czas jest mierzony w milisekundach ECMAScript od 01 stycznia 1970 UTC. Sekundowe sekundy są ignorowane. Zakłada się, że jest dokładnie 86 400 000 milisekund na dzień. Wartości liczb ECMAScript mogą reprezentować wszystkie liczby całkowite od -9,007, 199,254,740,991 do 9,007,199,254,740,991; ten zakres wystarcza do zmierzenia czasów do milisekundowej dokładności dla każdej chwili, która wynosi około 285 616 lat, albo do przodu lub do tyłu, od 1 stycznia 1970 UTC.

Rzeczywisty zakres czasów obsługiwanych przez obiekty Data ECMAScript jest nieco mniejszy: dokładnie od 100 000 000 dni do 100 000 000 dni, mierzony w stosunku do północy na początku 1 stycznia 1970 UTC.

Daje to zakres 8,640 000 000 000 000 milisekund po obu stronach 01 stycznia, 1970 UTC. Dokładny moment północy na początku 1 stycznia 1970 roku UTC jest reprezentowany przez wartość +0.

Powiązane problemy