0

ここに私の現在の日付検証関数があります:

  isValidDate = function(day,month,year) {
    var dteDate;
    dteDate=new Date(year,month,day);
    return ((day.toString()===dteDate.getDate().toString()) && (month.toString()===dteDate.getMonth().toString()) && (year.toString()===dteDate.getFullYear().toString()));
  }

その後、フィールドを確認します。

checkFields = function() {
  var iDate = $("inspect_date").value;
  if(iDate.length > 0) {
    var a = iDate.split("/"); 
    if(isValidDate(a[0],a[1]-1,a[2]) == false){
      alert("You have entered an invalid date. Please amend!");
      return false;
    }

したがって、現時点では、私が望む形式の dd/mm/yyy の日付を受け入れません。関数は先行ゼロが好きではありません。

私はこの方法でそれを修正しようとしました:

isValidDate = function(day,month,year) {
  var dteDate;
  dteDate=new Date(year,month,day);

  var day = dteDate.getDate();
  var month = dteDate.getMonth() + 1;
  var year = dteDate.getFullYear();

  var formatted =
      (day < 10 ? "0" : "") + day + "/"  +
      (month < 10 ? "0" : "") + month + "/"  +
      year;

  return ((day.toString()===dteDate.getDate().toString()) && (month.toString()===dteDate.getMonth().toString()) && (year.toString()===dteDate.getFullYear().toString()));
}

しかし、比較を行うときに「戻り」部分に間違った値が含まれるようになりました。

誰でも助けることができますか?

4

1 に答える 1

3

日付"02/04/2012"の例では、関数の最初のバリエーションが"02", 3, "2012"引数として渡されます。あなたの関数は、明らかに「等しくない」ものと"02"比較しようとします。"2"

数値は数値として比較する必要があります。単項+演算子は、文字列を数値に変換するためのショートカットです ( +"01"yields ;同様1に使用できます)。parseInt

return
    +day === dteDate.getDate() && 
    +month === dteDate.getMonth() &&
    +year === dteDate.getFullYear();

RegRx と JavaScript の Date オブジェクトを使用して日付を検証する別の方法を次に示します。

于 2013-02-14T14:12:52.467 に答える