2016-09-13 6 views
0

かなり最近、私は複数の日付期間の合計を計算するのに問題がありました。 5つの日付範囲があり、重複範囲を2〜3回追加することなく、合計期間を計算したいとします。どうしますか?重複のない日付範囲の継続時間の計算

答えて

0

私は簡単な解決策を思いつきました。すべての開始日と終了日をリストに追加し、リスト内の日付をソートします。次に、左から右に移動し、リスト内の各日付の間にすべての下位範囲を追加します。あなたはこのようなエントリでソートdateListを持っていると仮定すると:

dateList = [ 
    { 
     date: "startDate", 
     end: false, 
     index: 1 
    }, 
    { 
     date: "endDate", 
     end: true, 
     index: 1 
    }, 
    .... 
] 

計算のためのサンプルコードは、数ヶ月の期間は、このようなものになるだろう:それは素敵なコードではありませんが、多分このように理解することが容易です。あらゆる改善が評価されています:

function calculateDurationAmountWithoutAddingOverlappingRanges(dateList) { 
    var months = 0; 
    var currentOverlappingList = []; 

    for(var i = 0; i < dateList.length; i++) { 

     var startExists = false; 
     for(var j = 0; j < currentOverlappingList.length; j++) { 
      if (!currentOverlappingList[j].end) { 
       startExists = true; 
      } 
     } 

     var amount = 0; 
     if (startExists) { 
      amount = monthDiff(dates[i-1].date, dates[i].date); 
     } 

     currentOverlappingList.push(dates[i]); 

     // remove date from list if end date (means remove start and end) 
     if (dates[i].end) { 
      for(var k = 0; k < currentOverlappingList.length; k++) { 
       if(currentOverlappingList[k].index == dates[i].index) { 
        currentOverlappingList.splice(k,1); 
       } 
      } 
     } 
     months += amount; 
    } 
    return months; 
} 
関連する問題