0
<script>  
  dfrom = datefrom.split("/");
    dto = dateto.split("/");

     //Checking Year Part;
     if(parseInt(dfrom[2]) > parseInt(dto[2])){
      alert("DateFrom Cannot greater than DateTo");
      return false;
     }
     if((parseInt(dfrom[1]) > parseInt(dto[1])) && parseInt(dfrom[2]) == parseInt(dto[2])){
      alert("DateFrom Cannot greater than DateTo");
      return false;
     }
     if(parseInt(dfrom[0]) > parseInt(dto[0]) && (parseInt(dfrom[1]) == parseInt(dto[1])) &&    parseInt(dfrom[2]) == parseInt(dto[2])){
      alert("DateFrom Cannot greater than DateTo");
      return false;
     }
</script>

これは日付を比較するスクリプト コードであり、正常に動作していますが、2013 年 7 月 4 日と 2013 年 8 月 4 日を確認すると、「DateFrom は DateTo を超えることはできません」と表示され、これらの日付のみが間違った結果を示しています。私のスクリプトまたは何かにエラーはありますか?

どんな助けも非常に高く評価されます。

4

3 に答える 3

1

parseInt 関数の引数を解釈するとき、文字列が "0" で始まる場合、古いブラウザーはデフォルトとして 8 進数 (基数 8 の番号付けシステム) を使用します (例: '07'、'08')。ECMAScript 5 の時点で、デフォルトは 10 進数 (10) です (つまり、これは扱いにくいですが、少なくとも現在は減価償却されています)。

つまり、0 で始まる文字列 ("01") や数値 (01) を parseInt に 2 番目のパラメーター (radix、つまり番号付けシステムを意味する) を指定せずに渡すと、次のように解釈される可能性があります。基数 8。これは、07 === 7 と 08 がおそらく未定義の動作をすることを意味します (0、""、未定義、誰が知っていますか?)。

安全のために、日付を扱うときは常に 2 番目のパラメーターの基数を parseInt に設定してください (私は知っています)。たとえば、通常の基数 10 の parseInt(x, 10) です。

ちなみに先頭の0の数字は他の言語の8進数を表すので、文字列を数字に変換する際は取り除くと良いです。

幸運を!

于 2013-03-25T04:23:29.290 に答える
1

これを試して

dfrom = datefrom.split("/");
dto = dateto.split("/");


var x=new Date();
x.setFullYear(dfrom [2],dfrom [1]-1,dfrom [0]);

 var y=new Date();
y.setFullYear(dto [2],dto [1]-1,dto [0]);


if (x>y)
  {
  alert("X is big ");
  }
else
  {
  alert("Y is big");
  }

ここを参照

于 2013-03-25T04:08:34.603 に答える
0

日付文字列を比較する最も簡単な方法は、それらを日付オブジェクトに変換して比較することです。したがって、日付文字列が d/m/y の形式である場合。できるよ:

// s in format d/m/y
// e.g. 15/3/2013 or 15/03/2013
function toDate(s) {
  var s = s.split('/');
  return new Date(s[2], --s[1], s[0]);
}

var d0 = '3/3/2013';
var d1 = '15/3/2013';

// Compare dates
alert( toDate(d0) < toDate(d1) );  // true

alert( toDate(d1) < toDate(d0) );  // false

比較または算術演算で使用される場合、Date オブジェクトはその時間値である数値に強制されます。

于 2013-03-25T04:45:08.763 に答える