2015-03-31 3 views
0

Я использую datatable plugin версию 1.8.2 для отображения таблицы на моей веб-странице.jquery дата сортировки вопроса

Он работает отлично за исключением. Он не сортирует даты правильно, он показывает «недействительная дата» в объекте Date. ниже - мой фрагмент кода.

 $(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"}] 
       }); 

      }); 
      }); 
+0

Как выглядит дата? Похоже, что у вас есть несколько дат в формате 'Data.parse()' не распознаются. BTW - вы должны действительно рассмотреть возможность обновления вашей версии данных до, по крайней мере, версии 1.9.4. – davidkonrad

+1

Ваша проблема в вашей дате (03-17-2015 12:25:21) не в установленном формате. Какое поведение вы ожидаете, когда ваша дата 01-02-2015? 2 января (американец) или 1 февраля (большая часть мира)? Посмотрите здесь и попытайтесь получить свою дату в таком формате: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse –

+0

@davidkonrad Я не могу этого сделать. потому что все работает нормально, кроме сортировки по дате, и Клиент не будет исключать его :( – user3035305

ответ

1

Попробуйте эту скрипку:

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 приходит после утра в алфавитном порядке; следовательно, "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.

Смежные вопросы