Javascript 如何同时按年、月和季节进行排序?

Javascript 如何同时按年、月和季节进行排序?,javascript,sorting,datatables,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

因此,我使用此代码帮助对表中的“日期”列进行排序:

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));
}
} );
jQuery.extend(jQuery.fn.dataTableExt.oSort{
“月前”:功能(a){
返回新日期('01'+a);
},
“每月asc”:功能(a、b){
回报率((ab)?1:0);
},
“月描述”:功能(a、b){
回报率((ab)?-1:0);
}
} );
它适用于“2012年7月”等日期,但不适用于只有年份(如“2004年”)或季节(如2008年春季)的日期。此外,如果我有“未知”,我希望它总是出现在最后

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

谢谢大家!

顺便说一下,我是个新手——我有点了解后两个字符串在做什么,但第一个“monthYear pre”是个谜。如果有人想解释的话,我会很激动

"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”或“秋天,2007”之类的字符串。(逗号是可选的,不区分大小写。)我不知道这个表排序器API。我是根据“monthYear pre”建模的,但如果需要简单的排序方法,则很容易更改。

第一种方法是将“2012年7月”转换为“2012年7月1日”,将后者解析为日期,并对其进行排序。但您如何确定冬季是在夏季之前还是之后?大概是“2012年3月”<“2012年7月”,但“2012年12月”>是“2012年7月”,然而3月和12月的部分时间都在冬天,而7月显然是夏天。嘿,这是一个很好的观点。我可能会单方面做出决定,把这一年分成四个部分:五月、六月、七月、九月和十二月。使用这些组中的第一个月将确定顺序(所以冬季在夏季之后)。我想人们会应付的!然而,你知道,只有大约10天的冬天在十二月,大约80天在一月到三月?但是,在我所在的地方(美国新英格兰南部),十二月感觉像冬天,三月感觉像春天。我只是想知道你的要求是否在这里完全考虑清楚了。该表列出了在活动中发表的论文/演讲。大多数人有一个月的假期,但有些人没有。其中一些被列为发生在2007年秋季的一系列事件中。我不认为在这个例子中需要很大程度的精确性,所以我很乐意接受我上面写的内容。无论如何,维基百科已经说过:“在英国,气象学家认为冬天是十二月、一月和二月的三个最冷的月份”:P