Сортировка дат в DataTables?(переопределение функции) - PullRequest
0 голосов
/ 22 декабря 2018

DataTables правильно сортирует даты только в формате YYYY-MM-DD.Все остальные форматы они сортируют как string.

Поскольку я не фанат добавления библиотеки / плагина для каждой функциональности в мои проекты, я пытался решить ее самостоятельно.

DataTables использует функцию Date.parse(), чтобы «понять» дату и отсортировать ее.(согласно https://datatables.net/blog/2014-12-18). Поэтому я решил переопределить эту функцию и изменить ее так, чтобы она «понимала» также другие форматы даты.

Я добавил этот JS в свой код:

            let origFunction = Date.parse;

            Date.parse = function(str) {

                // I want to parse this date format: 27.01.2018
                if (str.indexOf('.') > 0) {
                    str = convertDateToISO(str); // my function translates date into 2018-01-27
                }
                return origFunction(str);
            };

Когда я проверяю это в консоли браузера, Date.parse прекрасно работает с моим форматом даты, но DataTables продолжают сортировать мои европейские даты в виде строк.

Есть идеи, что я делаю неправильно?Или это можно сделать таким образом?

решено:

В конце концов, похоже, что самый простой способ - подключить плагин "Moment.js", как описаноздесь: https://datatables.net/blog/2014-12-18#Operation Но, хотя в моем вопросе было требование "нет плагинов", я тоже принимаю ответ @billynoah как решение.

1 Ответ

0 голосов
/ 22 декабря 2018

Возможно, вы захотите взглянуть на ортогональные данные .Это позволяет вам определить пользовательское значение для сортировки вашего столбца.В этом случае наиболее простой способ - использовать временную метку для сортировки, а затем вы можете отображать дату в любом формате.Для данных, полученных из объекта или ajax, вы можете структурировать определение столбца следующим образом:

{
    data: 'date',
    render: {
        _: 'display',
        sort: 'timestamp'
    }
}

Для источника HTML вы можете использовать атрибут data-order:

<td data-order="1545466488">Sat, Dec 22nd 2018</td>

(Отказ от ответственности / Атрибуция: Это все более или менее прямо из руководства, указанного выше)

...