Проблема с таблицами DataTables с нисходящими датами и временем не по порядку - PullRequest
0 голосов
/ 12 марта 2019

Мне удалось отформатировать даты, которые я получаю из своего API, однако они неправильно сортируются в DataTables. Вот мой код JS:

function GetActivityLog(nodeId, domainName, computerName) {

$.ajax({
    url: **removed**,
    success: function (json) {
        table = $('#tblActivityLogs').DataTable({
            "order": [[0, "desc"]],
        });
        table.clear();
        table.rows.add(json).draw();
        $('#nodeName').html(computerName);
    }
})

}

$(document).ready(function () {
    $('#tblActivityLogs').DataTable({
        "order": [[0, "desc"]],
        "autoWidth": false,
        columnDefs: [
            { targets: 0, class: 'dt-body-nowrap', title: 'Date/Time', data: 'dateTime' , render: function (data) { return moment(data).format('MMMM Do YYYY, h:mm:ss a') } },
            { targets: 1, title: 'Type', data: 'entryType' },
            { targets: 2, title: 'Event ID', data: 'eventId' },
            { targets: 3, class: 'dt-body-wrap', title: 'Message', data: 'message' }
        ]
    });
})

Проще было сделать несколько снимков того, что я вижу:

datatablesimage

Как видите, даты по убыванию меняются между старыми, недавними и более старыми. Даже в тот же день времена запутаны. Вот клип исходного массива, содержащий неформатированную дату:

array

GetActivityLog вызывается с событием onClick, но, насколько я понимаю, код $(document).ready закладывает основные элементы и форматирование для таблицы данных, чтобы событие могло заполнять таблицу при вызове.

Примечание: Изображение элемента массива является первым в массиве, но оно отображается как пятый элемент изображения (12 марта @ 4:39 AM) в таблице.

Обновление

У меня был больший успех при форматировании данных с помощью moment следующим образом:

return moment(data).format('MMMM DD YYYY, h:mm:ss')

Похоже, DataTables может теперь правильно сортировать день, однако время все еще не сортируется (самое новое время для дня самое старое в списке для этого дня).

1 Ответ

0 голосов
/ 12 марта 2019

Ваш код выглядит правильно, но, к сожалению, без дополнительной помощи javascript не очень хорош для интуитивной сортировки числовых массивов. Например:

var arr = [5,1,13,20,3];
arr.sort() returns [1,13,20,3,5];

Таким образом, вы должны дать ему функцию, которая поможет ему иметь дело не только с первой цифрой, затем со второй цифрой (если есть, и так далее), но и с точки зрения 10> 2.

Я уверен, что вы уже знаете:

arr.sort(function(a,b){return a - b});  // asc
arr.sort(function(a,b){return b - a}); // desc

Проверьте эту ссылку для кода плагина, который поможет правильно отсортировать по дате и времени: https://datatables.net/plug-ins/sorting/datetime-moment

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...