2012-04-09 18 views
-1

私はDate()関数を使用して文字列を日付オブジェクトに変換します。問題は、もし私がDate("April , 31 ,2012")とすれば、それはMay , 01 , 2012(残りの日は動作しています)と思っています。私のアプローチが以下のコードから正しいことを確認してください。Javascript:日付は+1値で自動的にインクリメントされます(文字列をDateオブジェクトに変換)

function TestDate(objValue,strError){ 

    var ret=true; 
    var frmdate=objValue.value; 
    var datesplit=frmdate.split("-"); 
    var y =datesplit[0]; 
    var m=datesplit[1]; 
    var d=datesplit[2]; 
    var testdate; 
    // Create date object using given input data 
    testdate = new Date(m+"/"+d+"/"+y); 
    alert("Created date"+testdate.toString()); 
    var td=testdate.getDate(); 
    var tm=testdate.getMonth()+1; 
    var ty =testdate.getFullYear(); 
    alert(d+"="+td); 
    alert(m+"="+tm); 
    alert(y+"="+ty); 
    var valid=((d==td) && (m==tm) && (y==ty)); 
    alert(valid); 
    if(valid == false) 
    { 
     ret =false; 
    } 
    return ret; 
} 
+5

4月のみ30日しか使用できません。デフォルトでは31-04に1日が追加されるため、5月1日が返されます。 – ajreal

+0

objValue.valueに「2012-04-25」の形式があります – Sridhar

答えて

1

@ajrealのコメントで言われたように、Aprilはわずか30日間です。

内部日付オブジェクトは、有効な日付を持つ月をインクリメントします。

+0

@ajrealありがとう – Sridhar

+0

@ajrealご回答ありがとうございます。私はすでに知っている4月31日が有効な日付ではないことを知っているそれは01かもしれませんが、私のモジュールでは、4月31日の日付オブジェクトをしたいので、私はformdateを検証するために日付の日付オブジェクトを比較することができます。今私は、私は4月31日の日付オブジェクトを作成する場合、私は私のフォームの日付を検証できないことを認識します。 – Sridhar

0

コード:

testdate = new Date(m+"/"+d+"/"+y); 

さは、文字列の非標準、実装固有の構文解析に依存します。明確に日付を作成するためにあなたが始めたデータを使用してはるかに良い:日付を検証するためとして

testdate = new Date(y, m - 1, d); 

を、yyyy-mm-dd形式のISO8601準拠の日付を使用したシンプルな機能は以下のとおりです。

function validateDate(dateString) { 
    var bits = dateString.split('-'); 
    var date = new Date(bits[0], bits[1] - 1, bits[2]); 
    return date && date.getFullYear() == bits[0] && date.getDate() == bits[2]; 
} 

このようにして、関数に渡された文字列が日付に変換された場合、そのように作成された日付が入力と一致することを確認できます。そうでない場合は、有効ではなく、関数はfalseを返します。また、文字列が日付に変換されない場合はfalseを返します。

関連する問題