jQuery tablesorter自定义日期格式

时间:2014-01-21 00:57:36

标签: javascript jquery html asp.net tablesorter

我目前使用Tablesorter(一个jQuery插件)对表进行排序。我试图用yyyy MMM dd格式对日期进行排序,但似乎我无法做到这一点。我需要说我的日期输入是法语,如下:

  • 2014 janv。 05
  • 2013févr。 03
  • 2011 mars 02

我尝试了很多东西,但它没有按照正确的方式排序。我不知道这是因为我的日期输入还是用法语或其他什么,但是我将要放弃它。

这是我使用的代码

$.tablesorter.addParser({
            id: "date",
            is: function (s) {
                return false;
            },
            format: function (s, table) {
                var date = s.split(' ');
                var month = translateMonth(date[1]);

                var d = new Date(date[0], month, date[2]);
                console.log(d.toString());

                return d.getTime();
            },
            type: "numeric"
        });

并且

$("#table").tablesorter({
            headers: {
                2: {
                    sorter: 'date'
                }
            }
        });

function translateMonth(month) {
             switch (month) {
                 case "janv.": return 0;
                 case "févr.": return 1;
                 case "mars": return 2;
                 case "avril": return 3;
                 case "mai": return 4;
                 case "juin": return 5;
                 case "juil": return 6;
                 case "août.": return 7;
                 case "sept.": return 8;
                 case "oct.": return 9;
                 case "nov.": return 10;
                 case "déc.": return 11;
                 default: return -1;
             }
         }

我的 正确排序但问题是我的月份

我很感激任何帮助

谢谢 - S

2 个答案:

答案 0 :(得分:2)

你是对的,它不知道这些月份缩写是什么。有一些日期库可以支持这种事情,例如moment.js,如果你能够使用jquery,这是一个很好的工具。如果没有,那么只需将缩写转换为适当的月份数字。

function translateMonth(month)
{
 switch (month)
 {
    case 'janv.': return 0;
    case 'févr.': return 1;
    case 'févr.': return 2;
    case 'mars': return 3;
    case 'avril': return 4;
    case 'mai': return 5;
    case 'juin': return 6;
    case 'juil.': return 7;
    case 'août': return 8;
    case 'oct.': return 9;
    case 'nov.': return 10;
    case 'déc.': return 11;
    default: return -1;
 }
}

$.tablesorter.addParser({
    id: "customParser",
    is: function (s) {
        return false;
    },
    format: function (s) {
        var date = s.split(' '),
            month = translateMonth(date[1]);
        if(month >= 0)
          return new Date(date[0], month ,date[2]).getTime();
        else
          return new Date().getTime();
    },
    type: 'numeric'
});

答案 1 :(得分:0)

好吧,我找到了。我的javascript文件没有更新。其次,我使用我的单元格属性来获得传统日期。是的..这里真正的问题是,我必须处理可折叠的行。

我的代码:

$(function () {

            $.tablesorter.addParser({
                id: "date",
                is: function (s) {
                    return false;
                },

                type: "text",
                format: function (s, table, cell, cellIndex) {
                    var tr = $(cell).parent("tr");
                    var date = tr.data("date");
                    var id = tr.data("id");
                    var ind = tr.data("ind");

                    return date + " " + id + " " + ind;
                }
            });

            $("table").tablesorter({
                headers: { 2: {  sorter: "date" }
                },
                sortList: [[1, 0]],
                widgets: ['group', 'filter'],
                widgetOptions: {
                    group_collapsible: true,
                    group_collapsed: false,
                    group_count: false,
                    filter_childRows: false,
                }
            });
        });

        $(".open-supp").click(function (e) {
            var detail = $(this).closest("tr").next("tr.supp");
            $("tr.supp").not(supp).hide();
            detail.toggle("fast");

            e.preventDefault();
        });

谢谢