符合条件的排序问题与文本值' 05.04.2018 19:15'

时间:2018-04-05 01:04:35

标签: sorting footable

我有一个(footable)表格,其中包含日期时间戳记格式的文本列,如:

05.04.2018 19:00
09.06.2018 20:00
10.06.2018 19:00

我想按列值对此表进行排序,但它不起作用。提供像201804051900这样的sortValue也不起作用。

我的所有数据都是由jquery在服务器上执行php文件加载的。日期/时间列以以下格式加载:

$cols[$i]['name']="sp_timestamp"; 
$cols[$i]['title']="Datum/Zeit"; 
$cols[$i]['sorted']=true; 
$cols[$i]['direction']="DESC";

,行为:

$rows[$key]['sp_timestamp']['options']['sortValue']='201804051900';
$rows[$key]['sp_timestamp']['value']='05.04.2018 19:00';

$i$key只是php中迭代器的索引。

有人可以帮我吗?

编辑: 编辑:通过调查footable.js我发现了以下行为。我已将F.Column.prototype.sorter的参数打印到控制台。似乎正确使用了表sortValue的初始加载。任何进一步的排序都不会使用sortValue,而是使用列值本身。在DOM中,未设置data-sort-value属性。据我了解文档,这似乎是一个错误?

1 个答案:

答案 0 :(得分:0)

肮脏的解决方案: 我已经更改了F.Column.prototype.sorter来快速解决我的问题,使用momentjs来正确格式化字符串。但这只是一种解决方法。

F.Column.prototype.sorter = function(a, b){
        if ($.isNumeric(a)) {a=parseInt(a,10);} else if (typeof a === 'string') {a = a.toLowerCase()};
        if ($.isNumeric(b)) {b=parseInt(b,10);} else if (typeof b === 'string') {b = b.toLowerCase()};

        var m_a=moment(a, 'L LT');
        var m_b=moment(b, 'L LT');
        if (m_a.isValid()) {a=m_a.format('YYYYMMDDHHmm');}
        if (m_b.isValid()) {b=m_b.format('YYYYMMDDHHmm');}

        if (a === b) return 0;
        if (a < b) return -1;
        return 1;
    };

正如您所看到的,如果sortvalue是数字,我已经重新覆盖了默认的字符串排序。