2016-07-07 103 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); 
});