1

I have a table with various rows. Now I need to sort the data based on Submitted Date. Latest Date should be first. How can I start this in javascript. The Date is in format "2017-09-18T22:37:58.95". Any help please? The sample table format is:enter image description here

Here is the code to get the data from DB:

function BindTable(startdate, enddate) {

    var url = //weburl....
        $('#TicketTable > tbody > tr ').remove();

    $.ajax({
        url: url,
        type: "Get",
        dataType: "json",
        data: {
            Year: startdate,
            Rtype: enddate,
            Filtertxt: selPhaseNumber
        },
        crossDomain: true,
        success: function(data) {
            var rowCount = data.length;
            $('#num_results span').text(rowCount);
            if (data.length > 0) {
                var tr;
                var totalOFTotal = 0;

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

                    tr = $('<tr/>');
                    tr.append("<td>" + data[i].Executioncyclename + "</td>");
                    tr.append("<td>" + data[i].Created_by + "</td>");
                    tr.append("<td>" + data[i].TaskEndDt_WW + "</td>");
                    tr.append("<td>" + data[i].Total_amt + "</td>");
                    tr.append("<td>" + data[i].Status + "</td>");
                    tr.append("<td>" + data[i].SubmittedDate + "</td>");

                    $('#TicketTable').append(tr);
                }

                tr = $('<tr style="font-weight: bold; background-color: white" />');

                tr.append("<td></td>");
                tr.append("<td></td>");
                tr.append("<td></td>");
                tr.append("<td></td>");
                tr.append("<td></td>");
                tr.append("<td></td>");

                $('#TicketTable').append(tr);

            } else {
                ....... //else part
            }

        }
    });
}
Jay
  • 1,688
  • 5
  • 20
  • 34
shrey Pav
  • 181
  • 2
  • 6
  • 16

3 Answers3

1

You can sort before your for loop like this:

data.sort(function(a,b) {
        return new Date(b.SubmittedDate) - new Date(a.SubmittedDate);
    }
)
Dmitry
  • 6,716
  • 14
  • 37
  • 39
  • but will this reflect for other column values falling on a same row? – shrey Pav Sep 26 '17 at 08:20
  • Yes it will sort the objects by the `SubmittedDate`. You can reverse the sort by switching the places of `a` and `b`. – Dmitry Sep 26 '17 at 08:22
  • I meant sorting other columns execution cycle, creation etc based on submitted date. Will it work as expected? Anyway let me try this in my code :) – shrey Pav Sep 26 '17 at 08:44
  • 1
    It will work for other dates in ISO8601 format (the format you use). It will work for some other date formats too. Look in the docs https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse – Dmitry Sep 26 '17 at 08:49
0

You can add it to mass:

var a =["2017-09-18T22:37:58.95", "2017-11-18T22:37:58.95", "2017-10-18T22:37:58.95", "2017-08-18T22:37:58.95"]

Then sort:

a.sort()

Then reverse:

a = a.reverse() 
Redair
  • 204
  • 1
  • 2
  • 12
  • but will this reflect for other column values falling on a same row? – shrey Pav Sep 26 '17 at 08:20
  • No, it is just sort function, to sort colums you can use smth like this: var arrRows=[].slice.call(tbody.rows); arrRows.sort(); div.innerHTML=""; for (let i = 0; i < arrRows.length; i++) { div.appendChild(arrRows[i]); – Redair Sep 26 '17 at 08:27
  • you can saw here, where i sorted different colums https://github.com/madcher/project/blob/master/tableSort.html – Redair Sep 26 '17 at 08:33
0

I think you can use SORT function in javascript array. Try look at this answer.
In the sort function, compare the date field and return 1 if a.SubmittedDate is smaller, else -1 or 0 if equal.
Something like this.

...
                var tr;
                var totalOFTotal = 0;

                data.sort(function(a, b) {
                   return (a.SubmittedDate < b.SubmittedDate) ? 1 : ((a.SubmittedDate > b.SubmittedDate) ? -1 : 0)
                });

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

                    tr = $('<tr/>');
                    tr.append("<td>" + data[i].Executioncyclename + "</td>");
                    tr.append("<td>" + data[i].Created_by + "</td>");
                    tr.append("<td>" + data[i].TaskEndDt_WW + "</td>");
                    tr.append("<td>" + data[i].Total_amt + "</td>");
                    tr.append("<td>" + data[i].Status + "</td>");
                    tr.append("<td>" + data[i].SubmittedDate + "</td>");

                    $('#TicketTable').append(tr);
                }
...

Hope this help.

Viki Theolorado
  • 546
  • 5
  • 17