2016-07-07 7 views
0


ボタンクリックでデータテーブルの選択行から日付の最小値と最大値(フォーマット: 'YYYY-MM-DD')を検索する必要がある場合があります。
「Total」という別の列の値の合計を取得することはできましたが、最小値と最大値を計算する方法は苦労しました。

私のコードです:
データテーブルから選択した行の最低値と最高値を取得

// Show data in alert: 
// for example: From 2016-06-02 to 2016-06-05: Total = xxxxx.xx 
$('#showData').click(function() { 
    var totalSUM = 0; 
    $("table tbody tr.selected").each(function() { 
    var getTotal = $(this).find("td:eq(1)").html(); 
    totalSUM += Number(getTotal); 
    }); 
    alert('From "fromDate" to "toDate": Total = ' + totalSUM); 
}); 

そしてここでは、選択した行をループしながら、最小値と最大値を選ん作業demo

+1

、配列にすべての日付を入れて配列をソート、最初に取得し、最後の要素。 – Shilly

+0

最小値と最大値を得るために配列全体をソートする必要はありません。 –

答えて

1

:これを試してみてください。

$('#showData').click(function() { 
    var totalSUM = 0, minDate, maxDate; 
    $("table tbody tr.selected").each(function() { 
    var getTotal = $(this).find("td:eq(1)").text(), 
     date = $(this).find("td:eq(0)").text(); 
    totalSUM += Number(getTotal); 
    minDate = !minDate || date < minDate ? date : minDate; 
    maxDate = !maxDate || date > maxDate ? date : maxDate; 
    }); 
    alert('From "fromDate" to "toDate": Total = ' + totalSUM + ' from ' + minDate + ' to ' + maxDate); 
}); 

Forked Fiddle

+0

ありがとうArnauld:ウルの助けのために、別の問題を解決するためにもう一度フィドルをフォークしましたが、私はそれが大きな問題ではないと確信しています。リンクはhttps://jsfiddle.net/sohal/v1xjrvym/1/ – sohal07

+0

@ sohal07:連続した日のテストは[here](https://jsfiddle.net/8Ls1xgcb/)をご覧ください – Arnauld

1

です。 Demo。あなたはそれが最新と最古の日付を取得するためにpop()shift()を使用し、その後、すべての日付の新しい配列、sort()を作成することができ、これを達成するために

var totalSUM = 0, minDate, maxDate; 
    $("table tbody tr.selected").each(function() { 
    var getTotal = $(this).find("td:eq(1)").html(), 
     date = new Date($(this).find('td:eq(0)').text()); 

    if(!minDate || minDate > date) minDate = date; 
    if(!maxDate || maxDate < date) maxDate = date; 

    totalSUM += Number(getTotal); 
    }); 
0

。あなたはまた、MinDateプロパティとmaxDateのを追跡し、あなたはすでにTOTALSUMでやっているだけのように各反復でそれらを更新することができ

$('#showData').click(function() { 
    var totalSUM = 0; 
    var dates = $("table tbody tr.selected").map(function() { 
     totalSUM += parseFloat($(this).find("td:eq(1)").text()); 
     return new Date($(this).find('td:eq(0)').text()); 
    }).get().sort(function(a, b) { return b - a; });  
    var oldestDate = dates.pop(); 
    var newestDate = dates.shift(); 

    console.log(oldestDate); 
    console.log(newestDate); 
    console.log('From "fromDate" to "toDate": Total = ' + totalSUM); 
}); 

Updated fiddle

0

COMMENT-メイク配列で述べたように、ソートそれは、最初と最後の要素を取得:

// Show data in alert: 
// for example: From 2016-06-02 to 2016-06-05: Total = xxxxx.xx 
$('#showData').click(function() { 
    var totalSUM = 0, 
     dateArray = new Array(); 
    $("table tbody tr.selected").each(function() { 
    var getTotal = $(this).find("td:eq(1)").html(), 
     currDate = new Date($(this).find("td:eq(0)").html()); 
    totalSUM += Number(getTotal); 
    dateArray.push(currDate.getTime()); 
    }); 
    dateArray.sort(); 
    var fromDate = new Date(dateArray[0]); 
    var toDate = new Date(dateArray[dateArray.length-1]); 
    alert('From '+fromDate.toLocaleDateString()+' to '+toDate.toLocaleDateString()+': Total = ' + totalSUM); 
}); 
関連する問題