Почему JavaScript Date конструктор терпит неудачу на этом числе, но отлично работает как метод - PullRequest
0 голосов
/ 23 ноября 2018

Я, честно говоря, не уверен, как сформулировать этот вопрос.В основном откройте консоль JavaScript (узел, ваш браузер или где-то еще) и попробуйте это:

Date(564018060878018050) // 'Fri Nov 23 2018 06:22:20 GMT-0800 (Pacific Standard Time)'
new Date(564018060878018050) // <-- Invalid Date

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

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Вы вызываете конструктор Date как функцию и, как говорят в ECMAscript doc:

"Когда Date вызывается как функция, а не как конструктор, она возвращает строку, представляющую текущее время (UTC)."

" ПРИМЕЧАНИЕ Вызов функции Date (…) не эквивалентен выражению создания объекта new Date (…) с теми же аргументами."

Вы можете найтиподробнее здесь: https://www.ecma -international.org / ecma-262 / 5.1 / # sec-15.9.2

0 голосов
/ 23 ноября 2018

В спецификациях говорится, что :

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

Допустимый диапазон на намного меньше используемого вами значения (564 018 060 878 018 050).

И глубоко внутри конструктора Date(value) мы имеем :

Если abs (время)> 8,64 × 10 15 , вернуть NaN.

Это объясняет, почему new Date(564018060878018050) дает недопустимую дату.

Что касается Date(564018060878018050), спецификации говорят, что :

... Вызов конструктора без использования new имеет последствия, которые зависят от конструктора.Например, Date () создает строковое представление текущей даты и времени, а не объекта.

Так что Date(value) должен возвращать текущую дату в виде строки, а не даты.

> Date(564018060878018050) === (new Date()).toString()
< true

> typeof Date(564018060878018050)
< "string"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...