Сообщение от Блондинка
|
а где истина
|
Истина про JavaScript записана в спецификации
EcmaScript. А вы думали откуда производители браузера догадались? Они ведь явно не таким образом пишут браузер, как вы свой учебник!
Время в JavaScript представлено при помощи класса Date, экземпляры которого хранят конкретное время. Время измеряется в миллисекундах, прошедших с 1 января 1970 года. И поскольку целочисленные значения Number представлены целыми числами от -9 007 199 254 740 992 до 9 007 199 254 740 992, то этого достаточно, чтобы измерять время с миллисекундной точностью на протяжении 285 616 лет от полуночи 1 января 1970 по Гринвичу, как в будущее, так и в прошлое.
При помощи этого объекта можно представить любую зафиксированную дату из истории человечества. Однако у вас могут возникнуть вопросы:
- Как создавать даты в промежутке между 1 г. н. э. и 99 г. н. э. включительно?
- Почему год даты до нашей эры отличается на единицу?
Согласно спецификации EcmaScript, пункт
20.3.2.1, перегрузка конструктора класса Date, которая принимает хотя бы 2 аргумента, принимает в качестве аргументов числа, значение которых зависит от положения в списке аргументов:
Date ( год, месяц [ , число [ , часы [ , минуты [ , секунды [ , миллисекунды ] ] ] ] ] ). Однако в том же разделе указано, что если год приведённый к целочисленному значению, является числом от 0 до 99, то год, представленный объектом Date, будет являться годом от 1900 до 1999 соответственно. Также в этой перегрузке второй аргумент представляет месяц, уменьшенный на 1. Также это локальное время.
alert(new Date(2015, 8, 17)); // 17 сентября 2015
alert(new Date(65, 4, 5)); // 5 мая 1965
Строковое представление принимает любую дату по Гринвичу с 1 января 1 г. н. э. по 31 декабря 9999 г. н. э. в формате YYYY-MM-DD
alert(new Date("0034-05-15")); // 15 мая 34 г. н. э.
alert(new Date("0117-01-04")); // 4 января 117 г. н. э.
Остальные даты представляются при помощи расширенного строкового представления: в виде приставки знака и двух дополнительных разрядов для представления года.
alert(new Date("-000606-10-30")); // 30 октября 607 г. до н. э.
alert(new Date("-000001-01-01")); // 1 января 2 г. до н. э.
alert(new Date("+000000-01-01")); // 1 января 1 г. до н. э.
alert(new Date("+000001-01-01")); // 1 января 1 г. н. э.
alert(new Date("+001970-01-01")); // 1 января 1970 г. н. э.
alert(new Date("+002019-03-26")); // 26 марта 2019 г. н. э.
И ещё стоит учитывать, что нулевого года не существует. После 31 декабря 1 до н. э. идёт 1 января 1 г. н. э.