【问题标题】:How can I sort by year, month and season all at the same time?如何同时按年、月和季节排序?
【发布时间】:2012-07-12 03:52:30
【问题描述】:

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

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 年春季)的日期配合使用。另外,如果我有“未知”我希望它总是出现在最后。

有什么想法吗?我认为将季节与一个月类似是最简单的排序方法(例如 Spring=Mar、Summer=Jun、Autumn=Sep 和 Winter=Dec),但我不知道该怎么做。

谢谢!

附:我是新手 - 我有点理解后两个字符串在做什么,但第一个“monthYear-pre”是个谜。如果有人愿意解释,我会很高兴的。

【问题讨论】:

  • 第一个是将“Jul 2012”转换为“01 Jul 2012”,将后者解析为日期,并对其进行排序。
  • 但是你如何决定冬天是在夏天之前还是之后呢?大概是“2012 年 3 月”“2012 年 7 月”,然而 3 月和 12 月的部分时间都在冬季,而 7 月显然是夏季。
  • 呵呵,说得好。我可能会单方面做出决定,将这一年分成四个:MarAprMay、JunJulAug、SepOctNov 和 DecJanFeb。使用这些组的第一个月将确定顺序(所以冬天在夏天之后)。我认为人们会应付!
  • 您确实意识到,12 月只有大约 10 天的冬季,而 1-3 月大约有 80 天?但是,我在哪里(美国新英格兰南部),十二月感觉像冬天,三月感觉像春天。我只是想知道您的要求是否在这里得到了充分考虑。
  • 嗯。该表列出了在活动中发表的论文/演讲。他们中的大多数人有一个月的时间,但有些人没有。其中一些被列为来自(例如)“2007 年秋季”中发生的一系列事件。我认为在这种情况下不需要高度的准确性,所以我很乐意接受我上面写的内容。无论如何,维基百科已经说过:“在英国,气象学家认为冬季是十二月、一月和二月三个最冷的月份”:p

标签: javascript sorting datatables


【解决方案1】:
"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”之类的字符串。 (逗号是可选的,并且不区分大小写。)我不知道这个 table-sorter API。我以“monthYear-pre”为模型,但如果它需要是一个简单的排序方法,它很容易改变。

【讨论】:

    猜你喜欢
    • 2018-06-01
    • 2013-02-12
    • 1970-01-01
    • 2021-10-06
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多