Дата Javascript.метод parse работает неправильно

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

myApp.isValidDate = function(date) {
  var timestamp;
  timestamp = Date.parse(date);
  if (isNaN(timestamp) === false) {
    return true;
  }
  return false;
};

Он работает правильно в большинстве случаев, но когда я введите значение "something.com Eq Phone 1" дата.parse возвращает 978300000000 и метод, возвращенный true

как он проанализировал его как фактическую дату ?

2 ответов


это поведение не было согласовано между браузерами. В IE9 и FireFox,Nan был правильно возвращен, но в Chrome, казалось, думал something.com Eq Phone 1 было 1 января 2001 года.

Я сам не использовал эту библиотеку, но почему бы не проверить DateJS? Я скопировал в something.com Eq Phone 1 к их демонстрации, и она не произвела действительную дату.

Edit:

что касается того, почему это происходит, глядя на дата разбора исходного кода от Chromium, мы можем видеть эти комментарии:

любое непризнанное слово перед первым номером игнорируется.

и

MM и DD по умолчанию 01, Если отсутствует

mm, ss и sss по умолчанию 00, если отсутствует

что объясняет, почему ему удалось преобразовать (по существу) число 1 в действительную дату.

Edit 2:

Итак, чтобы уточнить, число в something.com Eq Phone 1 указывает на месяц. Например, изменение 1 до 3 дает 1 марта 2001 года.

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


Это похоже на причуду с реализацией синтаксического анализа Chrome.дата, как вы можете видеть здесь:

http://jsfiddle.net/feZ9P/1/

"something.com" is false
"something.com is invalid" is false
"something.com eq phone" is false
"something.com eq phone 1" is true
"something.com eq phone 5" is true
"anything that has one at the end 1" is true
"as long as 1 isn't earlier in the string 1" is false

Кажется, что это происходит, только если есть число, прикрепленное в конце строки, если нет этой ошибки, похоже, не происходит.