如何更改 Webix dateFilter 的过滤模式?

How to change the filtering pattern of the Webix dateFilter?

如何指定Webix数据表中dateFilter的格式?

我有一个日期格式为 "%d.%m.%Y":

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

其中myFormatwebix.Date.dateToStr("%d.%m.%Y");结果是dd.mm.yyyy

这是具有类似网格的片段:http://webix.com/snippet/1ec86aa8

关键是 dateFilter 仍然需要完整的日期 %m-%d-%Y (mm-dd-yyyy)

所以我正在寻找一种方法来更改此预定义模式。任何建议表示赞赏。

dateFilter 使用 webix.i18n.dateFormatDate

将用户输入的日期从 str 转换为 date

顺便说一句,它做的事情更多。例如,您可以输入“<1996”,因此它不会使用上述方法转换日期,而是提取年份。

然后它将猜测的日期转换为整数并与数据的日期进行整数比较

遗憾的是 "webix.i18n.dateFormatDate" 使用 webix.i18n.dateFormat 依赖语言环境将字符串转换为日期。并且无法自定义 dateFilter 使用的格式。

您的解决方案是创建一个自定义过滤器,它与 dateFilter 的工作相同,但使用您自己的日期转换:

这里是 dateFilter 修改后的 webix 代码:

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