2016-08-16 6 views
0

私はスタックオーバーフローからの日付比較の前の投稿を参考にしました - Compare two dates with JavaScript、しかし私はどこが間違っているのかは分かりません。ご案内ください。 FROMDATEの選択にJavaScript日付から日付への検証問題

function dateValidation(){ 
    alert("dateValidation"); 

    var dateFlag=true; 

    var fromdate_1=new Date(fYear,fMonth-1,fDate); 
    var currentDate_1=new Date(); 
    var todate_1=new Date(tYear,tMonth-1,tDate); 

    alert("fromDate"+fromdate_1); 
    alert("toDate"+todate_1); 
    alert("currentDate"+currentDate_1); 

    if(fDate==null||fMonth==null||fYear==null) 
    { 
     alert("null"); 
     dateFlag=false; 
     fromDateFlag=false; 
    } 
    else 
    { 
     alert("else"); 
     if(!isNaN(fromdate_1) && !isNaN(currentDate_1) && !isNaN(todate_1)) 
     { 
      alert("else 2"); 
      if(fromdate_1 > currentDate_1) 
      { 
       alert("fromDate>currentDate"); 
       fgcFlag=false; 
       dateFlag=false; 
      } 

      if(todate_1 < fromdate_1) 
      { 
       alert("toDate<fromDate"); 
       fgtFlag=false; 
       dateFlag=false; 
      } 

      if(fromdate_1 > currentDate_1 && todate_1 < fromdate_1) 
      { 
       alert("fromDate>currentDate && toDate< fromDate"); 
       dateFlag=false; 
       tlfFlag=false; 
      } 

      if(fromdate_1 > currentDate_1 && todate_1 > fromdate_1) 
      { 
       alert("fromDate>currentDate && toDate> fromDate"); 
       fgcFlag=false; 
       dateFlag=false; 
      } 
     } 
    } 
    alert("dateFlag"+dateFlag); 
    return dateFlag; 
} 

- "8月1日2016" とtoDateまで - "8月25日2016" と私はjavascriptの-dateValidation、 を起動したときに、私は順序

以下
  1. dateValidationにアラートを表示
  2. fromDateから"8月1日2016"
  3. toDateまで"8月16日2016年"
  4. CURRENTDATE "8月25日2016" 他に他
  5. dateFlag

本当の私は日付の比較はJavaScriptで起きていない観察

  • 。 私は dates.compare(a、b)は

    は数を返し承知しています:

    • -1 B
    • <
    • 0>の場合
    • 1 = B
    • かの場合B
    • NaNまたはbが違法日付

    P1のであれば誰かが私が間違っているところを指摘することができますか?何が変わるべきですか?

  • +0

    日付を比較するには、1970年以降のms、 'Date.getTime()'を使用します。 – Shilly

    +0

    ああああ..それは期待どおりに動作します – Sarronya

    +0

    それは正常では動作しません。現在の日付が1augと16 augよりも大きいため、25 aug。私はあなたのコードを私のコンソールにコピー/ペーストすると、16匹のAugを得るので、どうすれば25 ugを得ることができますか?16:33 – Shilly

    答えて

    0

    else2内部テストが失敗したので、の値dateFlagが変更されていない場合には、それが初期化されます値であり、のすべてのためにあなたはdateFlag真を取得します。

    考える:

    1. fromDateから "8月1日2016"
    2. toDateまで "8月16日2016年"
    3. CURRENTDATE "8月25日2016" そして

    fromdate > currentDate  // false 
    todate < fromdate  // false 
    fromdate > currentDate ... // false, second part of test isn't reached 
    fromdate > currentDate ... // false, second part of test isn't reached 
    

    それで、コードはそれがするように言われたことを正確に行います。あなたはCURRENTDATEはtoDateまで fromDateから間とであるかどうかを確認しようとしている場合は、:

    if (fromDate <= currentDate && currentDate <= toDate) { 
        // currentDate is in range 
    } 
    

    は、1つのステップであることありません。しかし、あなたが実際にやろうとしていることは言っていません。

    +0

    RobGを修正してください、ありがとう – Sarronya