Как изменить шаблон фильтрации в Webix dateFilter?

Как указать формат dateFilter в Webix datatable?

У меня есть сетка, где даты отформатированы в "%d.%m.%Y":

columns:[
  { id:"date", header:[{ content:"dateFilter" }], width:160, format:myFormat }
]

где myFormat является webix.Date.dateToStr("%d.%m.%Y"); Результат дд.мм.гггг

Вот фрагмент с похожей сеткой: http://webix.com/snippet/1ec86aa8

Дело в том, что dateFilter по-прежнему требует полных дат как %m-%d-%Y (Мм-дд-гггг)

шаблон фильтра даты Webix

Поэтому я ищу способ изменить этот предопределенный шаблон. Любые предложения приветствуются.

1 ответ

Решение

dateFilter конвертирует введенную пользователем дату из строки в дату, используя webix.i18n.dateFormatDate

Кстати, это делает больше. Например, вы можете ввести "<1996", и он не будет конвертироваться с использованием вышеуказанного метода, а будет извлекать год.

Затем он преобразует предполагаемую дату в целое число и выполняет сравнение между датами данных.

К сожалению, "webix.i18n.dateFormatDate" использует webix.i18n.dateFormat, которые зависят от локали для преобразования строки в дату. и нет никакого способа настроить формат, используемый dateFilter.

Решение для вас - создать пользовательский фильтр, который выполняет ту же работу, что и dateFilter, но с использованием вашего собственного преобразования даты:

Вот модифицированный код webix dateFilter:

webix.ui.datafilter.myDateFilter = webix.extend({
    format:function(value){
        if (value === "") return "";
        var date = new Date();

        if (value.indexOf("today") != -1){
            date = webix.Date.dayStart(date);
        } else if (value.indexOf("now") == -1){
            var parts = value.match(/[0-9]+/g);
            if (!parts||!parts.length) return "";
            if (parts.length < 3){
                parts.reverse();
                date = new Date(parts[0], (parts[1]||1)-1, 1);
            } else
                // Change here
                date = webix.Date.strToDate("%d.%m.%Y")(value.replace(/^[>< =]+/,""));

        }

        return date.valueOf();
    }
}, webix.ui.datafilter.numberFilter);

Обновленный фрагмент: http://webix.com/snippet/20c0175a

Другие вопросы по тегам