javascript - jquery数据表日期排序问题

标签 javascript jquery date jquery-plugins date-format

我正在使用datatable plugin版本 1.8.2 用于在我的网页上显示表格。

它工作正常,除了。 它没有正确排序日期,它在日期对象中显示“无效日期”。下面是我的代码片段。

     $(document).ready(function() {

                jQuery.fn.dataTableExt.oSort['usdate-asc']  = function(a,b) {
    /*
    a and b are <div> tag with date
    */
                    var texta = ($(a).text()).toString(); // Here I am able to see my date in ' 03-17-2015 12:25:21 AM ' format
                    var textb = ($(b).text()).toString();// Here I am able to see my date in ' 03-17-2015 12:25:21 AM ' format

                    var usDatea = new Date(Date.parse(texta)); // Here it is showing "invalid date"
                    var usDateb = new Date(Date.parse(textb)); 

                    return ((usDatea < usDateb) ? -1 : ((usDatea > usDateb) ?  1 : 0));
                };

                jQuery.fn.dataTableExt.oSort['usdate-desc'] = function(a,b) {
 /*
    a and b are <div> tag with date
    */
                    var texta = ($(a).text()).toString(); //same as above
                    var textb = ($(b).text()).toString(); //same as above

                    var usDatea = new Date(Date.parse(texta));  //same as above
                    var usDateb = new Date(Date.parse(textb));  //same as above

                    return ((usDatea < usDateb) ? 1 : ((usDatea > usDateb) ?  -1 : 0));
                };

                $('#tablegridname').dataTable( {
                    "sPaginationType": 'full_numbers',
                    "bJQueryUI": true,
                    "iDisplayLength": 50,
                    "aLengthMenu":[50,100,500,1000],
                    "aaSorting": [[ 4, 'desc' ]],
                    "aoColumns": [null, null, null, null, {"sType": "usdate"}]
                } );

            });
            });

最佳答案

试试这个 fiddle :

http://jsfiddle.net/82vh6mp2/

它使用这个简单的函数:

    function parseDateForSort(d)
    {
       return d.substring(6,10) + d.substring(0,2) + 
          d.substring(3,5) + d.substring(20) + 
          d.substring(11,19);
    }

该函数利用了这样一个事实:幸运的是,按字母顺序,PM 位于 AM 之后;因此字符串中间的“d.substring(20)”。所以我们有 YYYYMMDD[AM 或 PM]HH:MM:SS。

在您的代码中,您可以删除 Date.parse,并将返回值替换为:

  usDatea = parseDateForSort(texta);
  usDateb = parseDateForSort(textb);

  return ((usDatea < usDateb) ? -1 : ((usDatea > usDateb) ?  1 : 0));

祝你好运。

附录:

您可以创建自己的排序类型,然后指定列:

$.extend($.fn.dataTableExt.oSort, {
    "date-us-pre": function (v) {
        return parseDateForSort(v);
    },

    "date-us-asc": function ( a, b ) { return a - b; },
    "date-us-desc": function ( a, b ) { return b - a; }
} );    

然后在您的 .dataTable 调用中包括 "aoColumnDefs": [ { "sType":"date-us", "aTargets":[6] } ]

或者任何列号而不是 6。

关于javascript - jquery数据表日期排序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29372796/

相关文章:

javascript - 如何让颜色一次出现一个? (

javascript - 从 JavaScript (Rhino/Nashorn) 中添加和删除 Jar 文件和类

java - 如何在java中将日期从 "Tue May 08 2018 13:15:00 "转换为 "2018-05-08 13:15:00.000"

r - 将 data.frame 中的列转换为日期

arrays - 如何快速按日期对字典数组中的项目进行排序

javascript - ML5 : Error: You are passing a target array of shape 11342, 1,同时使用损失 'categorical_crossentropy' 。 'categorical_crossentropy' 预期目标

javascript - SVG 外来对象文本未显示

javascript - 在 PHP 中编码 JSON 并使用 POST 提交

javascript - '.active' 元素为 ':even' 时元素的移位顺序(JQuery)

jquery - 可拖动元素智能引用线无法正常工作