-1

関数を使用Date()して文字列を日付オブジェクトに変換します。問題は、私がDate("April , 31 ,2012") それを与えると、 May , 01 , 2012(残りの日は動作します)以下のコードから私のアプローチが正しいことを確認してください。

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;
}
4

2 に答える 2

1

コメントで @ajreal が言ったように、4 月は 30 日しかありません。

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

于 2012-04-09T11:54:41.783 に答える
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 を返します。

于 2012-04-09T12:40:56.220 に答える