Является ли объект Date в JavaScript уязвимым для проблемы Y2038? - PullRequest
11 голосов
/ 22 октября 2009

Предполагая, что 32-битная ОС / браузер может ли объект Date, созданный в JavaScript, перенести на 1970, если я установлю дату после 2038?

В документации Mozilla говорится, что год можно установить равным 9999, однако я не знаю, является ли это единообразным для всех реализаций JavaScript или это точное описание того, что предписывает спецификация.

Я думаю, учитывая формулировку в документации, похоже, что она использует 64-битное число для хранения времени или фактические данные в формате даты ISO.

Кто-нибудь знает, как это реализовано в браузерах?

1 Ответ

19 голосов
/ 22 октября 2009

Не должно быть - согласно спецификации ECMAScript seciont 15.9.1.1:

Время измеряется в ECMAScript в миллисекундах с 1 января 1970 года по UTC. Дополнительные секунды игнорируются. Предполагается, что есть ровно 86 400 000 миллисекунд в день. Числовые значения ECMAScript могут представлять все целые числа от –9,007,199,254,740,991 до 9,007,199,254,740,991; этого диапазона достаточно, чтобы измерить время с точностью до миллисекунды для любого момента, который находится в пределах приблизительно 285 616 лет, либо вперед, либо назад, с 1 января 1970 года по UTC.

Фактический диапазон времени, поддерживаемый объектами Date в ECMAScript, немного меньше: точно от 10000000 000 дней до 100 000 000 дней, измеренных относительно полуночи в начале 1 января 1970 года по UTC.

Это дает диапазон 8 640 000 000 000 000 миллисекунд по обе стороны от 01 января, 1970 UTC. Точный момент полуночи в начале 01 января 1970 года по Гринвичу представлен значением +0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...