我怎样才能同时按年,月,季分类?

时间:2012-07-12 11:46:06

标签: javascript sorting datatables

所以,我正在使用此代码来帮助对表格中的“日期”列进行排序:

jQuery.extend( jQuery.fn.dataTableExt.oSort, {
"monthYear-pre": function ( a ) {
    return new Date('01 '+a);
},

"monthYear-asc": function ( a, b ) {
    return ((a < b) ? -1 : ((a > b) ? 1 : 0));
},

"monthYear-desc": function ( a, b ) {
    return ((a < b) ? 1 : ((a > b) ?  -1 : 0));
}
} );

它适用于诸如“2012年7月”之类的日期,但它不会与仅有一年的日期(例如“2004”或有季节(例如2008年春季))合作。而且,如果我有“未知“我希望它总能出现在最后。

有什么想法吗?我认为使季节类似于一个月将是最简单的排序方式(例如春天=三月,夏天=六月,秋天=九月和冬天=十二月),但我不知道该怎么做。

谢谢!

P.S。我是新手 - 我有点理解后两个字符串在做什么,但第一个“monthYear-pre”是个谜。如果有人想解释那么我会很激动。

1 个答案:

答案 0 :(得分:0)

"seasonYear-pre": (function() {
    var seasons = /\s*(winter|spring|summer|fall|autumn),?\s*(\d{4})\s*/,
        matchedMonths = {winter: '02-01', spring: '05-01', 
                         summer: '08-01', fall: '11-01', autumn: '11-01'}
    return function(a) {
        var match = seasons.exec(a.toLowerCase());
        return new Date(match[2] + "-" + matchedMonths[match[1]]);
    };
})();

这将在今年年初安排冬季,但您可以根据需要更改上面列表中的规范日期。它匹配像“Winter 2012”或“Autumn,2007”这样的字符串。 (逗号是可选的,它不区分大小写。)我不知道这个表分类器API。我将其设置为“monthYear-pre”,但如果它需要一个简单的排序方法,那么很容易改变。