Javascript排序日期没有插件

时间:2016-03-23 19:14:07

标签: javascript html sorting

我有一段代码用于对HTML表格中的列进行排序,它完美地运行....除了日期字段。字母和纯数字它很棒!但是当在日期列上使用时,分拣机不能按我的意愿工作。目前日期的排序如下:

  

2016年1月2日

     

2016年2月1日

     

2014年12月12日

     

2015年12月14日

我想要发生的是:

  

2014年12月12日

     

2015年12月14日

     

2016年1月2日

     

2016年2月1日

以下是我用于使此排序工作的Javascript:

var tb, asc1 = 1,
   asc2 = 1,
   asc3 = 1,
   asc4 = 1,
   asc5 = 1,
   asc6 = 1;

      function sort_table(tbody, col, asc) {
      var rows = tbody.rows,
                 rlen = rows.length,
                 arr = new Array(),
                 i, j, cells, clen;
      // fill the array with values from the table
         for (i = 0; i < rlen; i++) {
            cells = rows[i].cells;
            clen = cells.length;
            arr[i] = new Array();
            for (j = 0; j < clen; j++) {
            arr[i][j] = cells[j].innerHTML;
            }
          }
       // sort the array by the specified column number (col) and order (asc)
           arr.sort(function (a, b) {
              return (a[col] == b[col]) ? 0 : ((a[col] > b[col]) ? asc : -1 * asc);
           });
       // replace existing rows with new rows created from the sorted array
           for (i = 0; i < rlen; i++) {
              rows[i].innerHTML = "<td>" + arr[i].join("</td><td>") + "</td>";
           }
        }

onclick功能是:

function test() {
   sort_table(tb, 0, asc1); asc1 *= -1; asc2 = 1; asc3 = 1; asc4 = 1; asc5 = 1; asc6 = 1;
};

有没有人对如何实现这一点有任何建议!我是Javascript的新手,每天都在学习!如果你无法从我的例子中得知,日期格式是mm-dd-yyyy。任何帮助将不胜感激!

更新

我已经采用了Daniel Almeida代码,因为他在一个示例中完全按照我的意愿工作,但我无法将其合并到我自己的代码中。当我这样做的时候,似乎是不稳定的,到处都是。我现在正在使用以下代码:

var sorter = function(id, column, order, isDate) {
  var t = document.getElementById(id);
  var rows = Array.prototype.slice.call(t.rows, 0);

  rows = rows.sort(function(a, b) {

  var dtA = (isDate) ? new Date(a.cells[column].innerHTML) : a.cells[column].innerHTML;
  var dtB = (isDate) ? new Date(b.cells[column].innerHTML) : b.cells[column].innerHTML;

  return (order == 0) ? dtA > dtB : dtA < dtB;

});

for (i = 0; i < rows.length; i++) {
  t.appendChild(rows[i]);
  }

}

我也创造了一个jsfiddle,但我无法让jsfiddle做任何事情。让我担心我错过了一些我不知道的东西。这是jsfiddle

分割两个表的原因是底层表是动态加载的,而容器div允许滚动窗口而不是一个长的信息列表,当有100个返回的记录时。

4 个答案:

答案 0 :(得分:1)

使用Javascript内置的Date对象。可以轻松地对日期对象数组进行排序,如下所示:

var array = [
  new Date("01/02/2016"),
  new Date("02/01/2016"),
  new Date("12/12/2014"),
  new Date("12/14/2015")
];
array.sort();

答案 1 :(得分:1)

第一个例子:sort table

var sorter = function(td, id, column, isDate) {

    var tbl = document.getElementById(id);
    var rows = Array.prototype.slice.call(tbl.rows, 0);

    var order = td.getAttribute("order") == "asc" ? "desc" : "asc";
    td.setAttribute("order", order);

    rows = rows.sort(function(a, b) {

      var valA = a.cells[column].innerText;
      var valB = b.cells[column].innerText;

      var compA = (isDate) ? new Date(valA) : valA;
      var compB = (isDate) ? new Date(valB) : valB;

      if (order == "asc") {
        if (compA < compB) return -1;
        if (compA > compB) return 1;
      }

      if (order == "desc") {
        if (compA > compB) return -1;
        if (compA < compB) return 1;
      }

      return 0;

    });

    for (i = 0; i < rows.length; i++) {
      tbl.appendChild(rows[i]);
    }

  }

编辑:检查这个小提琴working with date and text, asc and desc

答案 2 :(得分:0)

您可以从日期对象中获取每个项目的时间

var arr = [];

arr[i]= new Date(item_date_string).getTime();

您可以对整数值数组进行排序,然后填充等价日期字符串数组

答案 3 :(得分:0)

如果你想使用jquery插件来排序日期,你也可以参考这个答案sort date in html table using jquery