Можете ли вы создать даты, которые ниже, чем 271800 до н.э.? Как время динозавров? - PullRequest
9 голосов
/ 14 января 2012

Это настолько низкое значение, насколько я могу судить по дате JavaScript:

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

Если значение меньше -271,800 г. до н.э., возникает неверная ошибка даты.Можем ли мы вернуться на миллион лет назад?Или миллиард?Может ли объект даты позволить вам бесконечно описывать любую дату в прошлом или будущем?Как я могу сделать что-то подобное?

Ответы [ 4 ]

10 голосов
/ 14 января 2012

Представление определенной даты миллион лет назад кажется мне бессмысленным. Юлианский календарь? Должны ли дни недели соблюдать систему вавилонский ?

Создайте свой собственный тип для этого, решите, что вам действительно нужно представлять.

--- Обновлено: это было принято, поэтому я добавлю еще несколько конкретных битов. ---

Как уже упоминалось в другом ответе, согласно спецификации EcmaScript, стр. 164 пятого издания (ссылка - .pdf.)

Время измеряется в ECMAScript в миллисекундах с 1 января 1970 г. УНИВЕРСАЛЬНОЕ ГЛОБАЛЬНОЕ ВРЕМЯ. В значениях времени високосные секунды игнорируются. Предполагается, что ровно 86 400 000 миллисекунд в день. Номер ECMAScript значения могут представлять все целые числа от –9,007,199,254,740,991 до 9.007.199.254.740.991; этого диапазона достаточно для измерения времени до с точностью до миллисекунды в любой момент, который находится в пределах приблизительно 285 616 лет, вперед или назад, с 1 января 1970 года по Гринвичу.

Фактический диапазон времени, поддерживаемый объектами Date в ECMAScript: немного меньше: ровно –100 000 000 дней до 100 000 000 дней измерено относительно полуночи в начале 01 января 1970 г. УНИВЕРСАЛЬНОЕ ГЛОБАЛЬНОЕ ВРЕМЯ. Это дает диапазон 8 640 000 000 000 000 миллисекунд до по обе стороны от 01 января 1970 года по Гринвичу.

Но это для теоретических дат. Он игнорирует несколько кусочков реальности. Дни были короче (на 12 секунд) миллион лет назад, поэтому некоторая математика JavaScript была бы неточной. Дни недели были определены с помощью разных систем. Месяцы были определены по-разному. Все, чтобы сказать, решить, что вы действительно должны представлять.

3 голосов
/ 14 января 2012

Вы должны создать свой собственный DateTime для этого. Его сложность зависит от того, чего вы хотите достичь ... если вы хотите представлять только год, то это просто простое число ... если вы хотите сказать, какой датой было последнее воскресенье в 1 200 000 году до нашей эры, это больше сложный ... но имейте в виду, что воскресенья не существовали в тот год:) ... Григорианский календарь, который мы используем сейчас, введен в 1582 году нашей эры, юлианский календарь в 45 году до нашей эры (и я не уверен, что было до этого). Я не думаю, что даже javascript DateTime учитывает это, поэтому установка его на 271800 г. до н.э. не имеет смысла.

3 голосов
/ 14 января 2012

Стандарт ECMAScript требует, чтобы объект Date мог представлять любую дату и время с точностью до миллисекунды в течение 100 миллионов дней до или после 1 января 1970 года.Это диапазон плюс или минус 273 785 лет.Чтобы представлять даты за пределами этого диапазона, вам необходимо реализовать собственный объект даты, который не работает с разрешением в миллисекундах.

1 голос
/ 14 января 2012

Согласно https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date:

Дата JavaScript измеряется в миллисекундах с полуночи 01 Январь 1970 UTC. День держит 86 400 000 миллисекунд. JavaScript Диапазон объектов даты составляет от -100 000 000 дней до 100 000 000 дней относительно 01 января 1970 UTC.

Объект JavaScript Date обеспечивает единообразное поведение на разных платформах.

Ресурсы ограничены, и разработчик должен найти компромисс между хранилищем, производительностью и диапазоном для любого типа данных. ИМХО диапазон экмаскриптов для дат достаточно велик для любого практического вопроса.

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