2016-09-11 7 views
0

日付(MM/DD/YYYY形式)がJavaScriptで有効な日付かどうかをチェックしようとしていました。しかし、間違った日付を渡している間は、区別することはできません。 以下のロジックを使用して、有効な日付かどうかを確認していました。javascriptで間違った日付を渡している間に例外をスローしていません

var dt = document.forms["registerForm"]["dateOfBirth"].value; 
    try{ 
     var d = new Date(dt); 
     alert(d); 
    }catch(err){ 
     alert("not a valid date"); 
     return false; 
    } 

dateOfBirthのは「02/47/2016」それはむしろ、それは金2016年3月18日00:00:00 GMT +として「02/47/2016」と解釈され、例外ブロックするつもりはないですしながら、 0530(IST)。しかし、私は "02/03/2016"で試してみましたが、Wed Feb 03 2016 00:00:00 GMT + 0530(IST)と正しく解釈されています。

+0

[JavaScriptで "無効な日付" Dateインスタンスを検出]の可能複製(http://stackoverflow.com/questions/1353684/日付が無効な日付のインスタンスをJavaScriptで検出しています) – casraf

答えて

1

Dateコンストラクタは、日の値を取得し、ちょうどあなたが得る結果の日付を説明し、月の最初に、その日数マイナス1を追加します。

momentjsのようなライブラリを使用すると、日付を扱う際の作業がはるかに簡単になりますが、追加のライブラリなしでこれを行うには、以下の関数を使用できます。 Dateコンストラクタが日付オブジェクトを返す場合、この関数は日付を文字列にフォーマットし、元の入力と比較します。一致しない場合、例外が発生したときと同様に、関数はundefinedを返します。それらが一致する場合は、日付オブジェクトが返されます。

function getDate(d) { 
 
    function formatDate(d) { 
 
     return [d.getMonth() + 1, d.getDate(), d.getFullYear()] 
 
       .map(n => (n < 10 ? '0' : '') + n).join('/'); 
 
    } 
 
    try { 
 
     var d = new Date(dt); 
 
     if (formatDate(d) != dt) return; // invalid 
 
     return d; 
 
    } 
 
    catch(err){} 
 
} 
 

 
var dt = '02/47/2016'; 
 
console.log(dt, getDate(dt) !== undefined); 
 
var dt = '02/03/2016'; 
 
console.log(dt, getDate(dt) !== undefined);

1

ユーザーがフォームに日付を入力すると、いくつかの構造が強制されます。 MM/DD/YYYY。もしあなたがそうでなければ、国によっては2月10日か10月2日に有効な02/10/2016のような日付で終わるかもしれません。

これまでは、痩せていない限り、moment.jsを使用して検証しました。

alert(moment("02/10/2016", 'MM/DD/YYYY',true).isValid()); //true 
+0

はい使用の瞬間です。あなたはあなたの正気を保つでしょう。 – Darkrum

関連する問題