2015-12-03 2 views
1

Я читаю документ для MomentJS для проверки момента времени, созданного из строки.Метод MomentJS - isValid() корректно не корректен

пример они дали это:

1) moment("not a real date").isValid(); // false 

, но если добавить 1 в конце строки и подтвердите его, я получаю:

2) moment("not a real date 1").isValid(); // true 

Почему это # ​​2 является действительный объект даты даты?

ответ

3

Обратите внимание, что этот конструктор теперь deprecated. Но для ответа на вопрос:

Этот конструктор поворачивается и передает строку "not a real date 1" в конструктор Date. Посмотрите на это:

В Chrome:

new Date("not a real date 1") --> Mon Jan 01 2001 00:00:00 GMT-0600 (Central Standard Time) 
new Date("not a real date") --> Invalid Date 

В IE11:

new Date("not a real date 1") --> [date] NaN[date] NaN 
new Date("not a real date") --> [date] NaN[date] NaN 

В FireFox 42:

new Date("not a real date 1") --> Invalid Date 
new Date("not a real date") --> Invalid Date 

Так что ответ, это является правильность проверки и его действительный объект даты, поскольку Date конструктор успешно создал объект Date. В конструкторе Date есть ошибка, по крайней мере в некоторых браузерах.

Edit:

Вот соответствующая часть ECMAScript 6 spec, курсив:

Если Тип (v) является String, то Пусть телевизор будет результатом разбора V в качестве даты , точно так же, как и для метода разбора (20.3.3.2). Если разбор завершился резким завершением, tv - это запись завершения.

И затем, раздел 20.3.3.2:

Функция первой попытки разобрать формат строки в соответствии с правилами (в том числе протяженных лет), называемых в Date Time Струнный Format (20.3.1.16) , Если строка не соответствует этому формату, функция может вернуться к любой эвристике, специфичной для конкретной реализации, или к форматам дат реализации. Неузнаваемые строки или даты, содержащие недопустимые значения элементов в формате String, должны вызывать Date.parse для возврата NaN.

Итак, поскольку спецификация явно позволяет браузеру творчески разбирать строку, я думаю, это не ошибка. Chrome просто не ведет себя так же, как другие.

+0

Теперь я вижу. Благодаря! – rolu

+0

Я нашел спецификацию. См. Править. – Amy

+0

Цените его. tyvm! – rolu