2016-07-07 98 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

您也可以保留的minDate和的maxDate的跟蹤和更新他們在每次迭代就像您已經在與totalSUM做。

$('#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:查看[這裏](https://jsfiddle.net/8Ls1xgcb/)連續幾天的測試 – Arnauld

1

選擇最小和最大價值的同時遍歷選擇的行。 Demo

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

要做到這一點,您可以創建的所有日期的一個新的數組,sort(),然後使用pop()shift()獲得最新和最古老的日期。試試這個:

$('#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); 
});