Javascript Date.parse方法无法正常工作

时间:2013-03-08 10:16:14

标签: javascript date date-parsing

我正在使用一种方法检查我的应用程序中的日期是否有效

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

它在大多数情况下都能正常工作,但是当我输入"something.com Eq Phone 1"之类的值时Date.parse返回978300000000并返回方法true

它是如何将其解析为实际日期的?

2 个答案:

答案 0 :(得分:3)

此行为在各种浏览器中都不一致。在IE9和FireFox中,Nan已正确返回,但在Chrome中,似乎认为something.com Eq Phone 1是2001年1月1日。

我自己没有使用过此库,但为什么不查看DateJS?我将something.com Eq Phone 1复制到他们的演示中,但没有生成有效日期。

修改

至于为什么会这样,看看Chromium的date parsing source code,我们可以看到这些评论:

  

忽略第一个数字之前的任何无法识别的单词。

  

如果缺少

,MM和DD默认为01      如果缺少

mm,ss和sss默认为00

这可以解释为什么它设法将(基本上)数字1转换为有效日期。

编辑2:

因此,澄清一下,something.com Eq Phone 1中的数字似乎表示月份。例如,将1更改为3将于2001年3月1日发布。

在这个阶段,我找不到任何确凿的证据证明这一年默认为2001年。

答案 1 :(得分:0)

这似乎是Chrome实施parse.date的一个怪癖,你可以在这里看到:

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

如果在字符串的末尾附加了一个数字,如果没有出现此错误,似乎只会发生。