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 では正しく返されましたが、Chromeでは 2001 年 1 月 1 日Nanだと思われていたようです。something.com Eq Phone 1

私はこのライブラリを自分で使用したことはありませんが、DateJSをチェックしてみませんか? 彼らのデモにコピーしましsomething.com Eq Phone 1たが、有効な日付が生成されませんでした。

編集:

なぜこれが起こっているのかについては、Chromium の日付解析ソース コードを見ると、次のコメントが見られます。

最初の数字の前にある認識されない単語は無視されます。

MM と DD がない場合、デフォルトは 01 です

mm、ss、および sss がない場合、デフォルトは 00 です

これにより、(本質的に) 数値 1 を有効な日付に変換できた理由が説明されます。

編集2:

明確にするために、 の数字something.com Eq Phone 1は月を示しているように見えます。たとえば、1を aに変更すると3、2001 年 3 月 1 日になります。

この段階では、年がデフォルトで 2001 年であるという確固たる証拠を見つけることができません。

于 2013-03-08T10:45:14.180 に答える
0

ここでわかるように、これは parse.date の 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

文字列の末尾に数字が付いている場合にのみ発生するようで、なければこのエラーは発生しないようです。

于 2013-03-08T10:48:02.587 に答える