0
かなり最近、私は複数の日付期間の合計を計算するのに問題がありました。 5つの日付範囲があり、重複範囲を2〜3回追加することなく、合計期間を計算したいとします。どうしますか?重複のない日付範囲の継続時間の計算
かなり最近、私は複数の日付期間の合計を計算するのに問題がありました。 5つの日付範囲があり、重複範囲を2〜3回追加することなく、合計期間を計算したいとします。どうしますか?重複のない日付範囲の継続時間の計算
私は簡単な解決策を思いつきました。すべての開始日と終了日をリストに追加し、リスト内の日付をソートします。次に、左から右に移動し、リスト内の各日付の間にすべての下位範囲を追加します。あなたはこのようなエントリでソート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;
}