将日期字符串实际转换为yyyy-mm-dd

时间:2016-09-15 09:27:26

标签: javascript jquery sorting date

我编写了一个非常小的轻量级自定义函数,它根据它的值对表进行排序。此功能可以很好地适用于所有列和缩放。

我遇到的问题是按日期订购。从数据库中检索的数据(不能更改)的格式为dd-mm-yyyy。显然,这是按第一个值排序,由于01-06-2016不应该在09-01-2016之前,因此不能提供所需的结果。

我可以编写一个单独的函数来执行各种日期转换和比较,但到目前为止,我的尝试变得非常臃肿。几乎变得比oringinal功能更大。有人可以建议一个干净的方法吗?

DEMO http://jsfiddle.net/6sskjbod/565/

function sortTable(order, col) {
  var rows = $('#mytable tbody  tr').get();

  rows.sort(function(a, b) {

    var A = $(a).children('td').eq(col).text().toUpperCase();
    var B = $(b).children('td').eq(col).text().toUpperCase();

    if (order) {
      if (B < A) return -1;
      if (B > A) return 1;
    } else {
      if (A < B) return -1;
      if (A > B) return 1;
    }

    return 0;
  });

  $.each(rows, function(index, row) {
    $('#mytable').children('tbody').append(row);
  });
}

3 个答案:

答案 0 :(得分:2)

您只需将日期字符串转换为ISO格式(YYYY-MM-DD),然后您只需将其转换为Date对象即可。

您的jQuery sortTable函数将如下所示:

function sortTable(order, col) {
  var rows = $('#mytable tbody  tr').get();

  rows.sort(function(a, b) {
  var A,B;
 if(col==0)
 {
        valA = $(a).children('td').eq(col).text().split('-');
        valB = $(b).children('td').eq(col).text().split('-');
    A = new Date(valA[2]+"-"+valA[1]+"-"+valA[0]);
    B = new Date(valB[2]+"-"+valB[1]+"-"+valB[0]);;
 }
 else
 {
    A = $(a).children('td').eq(col).text().toUpperCase();
    B = $(b).children('td').eq(col).text().toUpperCase();
  }
    if (order) {
      if (B < A) return -1;
      if (B > A) return 1;
    } else {
      if (A < B) return -1;
      if (A > B) return 1;
    }

    return 0;
  });

  $.each(rows, function(index, row) {
    $('#mytable').children('tbody').append(row);
  });
}

这是工作小提琴http://jsfiddle.net/7jLvvp0n/2/

答案 1 :(得分:0)

如何将日期添加到html?如果您正在接收数据并且知道当前日期值,则可以轻松地重新格式化日期值,如:

var parts = origDate.split('-');
var newFormat = parts[2] + '-' + parts[1] + '-' + parts[0];

在添加到DOM之前。

答案 2 :(得分:0)

你可以约会&#39;日期&#39;类到特定th然后在函数本身内以不同方式处理它们。在这个例子中,我只是通过检查类来检测它是否为日期值,然后反转这些值,使其显示为yyyy-mm-dd

https://jsfiddle.net/kplcode/2nvopbqo/1/

$(".sort").click(function() {
  var col = $(this).parent().children().index($(this));
  var desc = $(this).hasClass('desc');
  var date = $(this).hasClass('date');
  sortTable(desc, col, date);
  $(this).toggleClass("desc asc");
});

function sortTable(order, col, date) {
  var rows = $('#mytable tbody  tr').get();

  rows.sort(function(a, b) {

    var A = $(a).children('td').eq(col).text().toUpperCase();
    var B = $(b).children('td').eq(col).text().toUpperCase();

    if(date) {
      var A = A.split("-").reverse().join('-');
        var B = B.split("-").reverse().join('-');
    }

    if (order) {
      if (B < A) return -1;
      if (B > A) return 1;
    } else {
      if (A < B) return -1;
      if (A > B) return 1;
    }

    return 0;
  });

  $.each(rows, function(index, row) {
    $('#mytable').children('tbody').append(row);
  });
}