6

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

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

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

4

2 回答 2

3

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

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

编辑:

至于为什么会这样,查看 Chromium 的日期解析源代码,我们可以看到以下注释:

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

MM 和 DD 缺失时默认为 01

mm、ss 和 sss 缺失时默认为 00

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

编辑2:

因此,为了澄清,中的数字something.com Eq Phone 1似乎表示月份。例如,将 更改1为 a3会给出 2001 年 3 月 1 日。

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

于 2013-03-08T10:45:14.180 回答
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

似乎只有在字符串末尾附加了一个数字时才会发生,如果没有,则似乎不会发生此错误。

于 2013-03-08T10:48:02.587 回答