Как изменить шаблон фильтрации в 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
(Мм-дд-гггг)
Поэтому я ищу способ изменить этот предопределенный шаблон. Любые предложения приветствуются.
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