2017-01-26 80 views
-1

希望出力:今日の日付と比較して今日の前後の天気を戻す必要がある日付変数があります。私はそれがアクティブであるかどうかを示すために「はい」または「いいえ」を返すことを希望します。日付をNull値で比較JavaScript

<script> 
    function calculate(currentlyEffective) { 

     var now_utc = new Date(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds()); 
     var expDate = currentlyEffective.Expiration_Date; 
     expDate = new Date(expDate).toUTCString(); 
     var result = ""; 

     if (expDate < now_utc) { 
      result = "No" 
     } 
     else { 
      result = "Yes" 
     } 
     return result; 
    } 

</script> 

問題:

  1. 彼らはまだ有効期限が切れていないため、値を持っていない渡される日付の一部。これはThu, 01 Jan 1970 00:00:00 GMTを返します。"Yes"をまだアクティブにしている有効期限がないため、日付が今日よりも少なくても、希望の出力は"Yes"になります。

  2. 計算で何か問題が発生していません。私の戻り値は常に"Yes"

質問です:

  1. 私は私の場合は、他の機能を正しくこれらの日付を比較するのですか?

  2. 今日の前にあるexpDateに日付がある場合でも、私はまだ戻り値として「はい」を取得します。私は間違って何をしていますか?

答えて

0

文字列と日付オブジェクトを<と比較していますか?あなたは何を期待していますか?あなたは数としての時間を必要とし、時間文字列を必要といけない:

var now=new Date().getTime();//current time as number (ms since...) 
var old=new Date(timestring).getTime();//time as number with a timestring ("12:20 ...") 
if(now<old){ 
alert("future date!"); 
} 

全コード:RobGが指摘したように

function calculate(currentlyEffective) { 

    var now = new Date().getTime(); 
    var expDate = currentlyEffective.Expiration_Date; 
    expDate = new Date(expDate).getTime(); 

    return expDate<now?"Yes":"No"; 
} 

、これは、2つのオブジェクト、trysに<を使用して、shortifiedすることができます実際にgetTimeを呼び出すと番号に変換する:

var calculate=(currentlyEffective)=>new Date(currentlyEffective.Expiration_Date)<new Date()?"Yes":"No"; 
+0

これは 'new Date(currentlyEffective.Expiration_Date) RobG

+0

関連:* "2つの文字列を<" *で比較しています。 * now_utc *はDateオブジェクト、* expDate *は文字列です。 – RobG

+0

@RobG:objに対してtoString()が呼び出された場合、shureしませんでした。解明と簡略化についての小さなメモに感謝します。私の答えにそれを加えました... –