Полный спектр объектов JavaScript Date? - PullRequest
4 голосов
/ 04 октября 2011

Я читаю информацию о смешанных / максимальных значениях объектов дат JavaScript в различных реализациях.

В документах Mozilla говорится, что JavaScript поддерживает " -100 000 000 дней до + 100 000 000 с обеих сторон"эпохи UNIX.Если моя математика верна, это должно быть 8,64e15 мс с каждой стороны.

Microsoft MSDN говорит, что JScript поддерживает " приблизительно 285 616 лет с обеих сторон" эпохи UNIX.

Модульные тесты для Google v8 указывают + / - 1e8 дней с эпохи.

ECMAScript 5.1 указывает немного более четко :

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

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

Мне любопытно, кто-нибудь знает любую реализацию, которая не на самом деле поддерживает это "+ /-1е8 дней от эпохи "диапазон?

Ответы [ 2 ]

4 голосов
/ 04 октября 2011

Это работает во всех основных версиях браузеров:

var d = new Date();
d.setTime(8640000000000000);
document.write(d);

Результаты:

Пт 12 сентября 275760 20:00:00 GMT-0400 (восточное дневное время)

Это не работает:

d.setTime(8640000000000001);

В IE7 / WinXP я получаю ошибки js.

3 голосов
/ 04 октября 2011

Я сомневаюсь, что такая реализация используется сегодня. Если вы поддерживаете целочисленный диапазон, нет причин не поддерживать диапазон дат. И этот целочисленный диапазон является побочным эффектом других требований типа Number в js (см. 8.5 в стандарте, Number в основном IEEE 754). Так что это все одна упаковка. То есть, если бы была такая реализация, скорее всего, они неправильно реализовали Number, что весьма маловероятно.

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