Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如何更改数据过滤器中搜索数据的格式_Angularjs_Date_Filter - Fatal编程技术网

Angularjs 如何更改数据过滤器中搜索数据的格式

Angularjs 如何更改数据过滤器中搜索数据的格式,angularjs,date,filter,Angularjs,Date,Filter,我有一个表,我用它过滤。其中一列是日期,我喜欢以dd/MM/yyyy的格式显示日期,所以所有的日期列都是这样的,但是当我在过滤器输入中输入日期时,它不知道应该以其他格式搜索,所以它找不到要查找的日期 我尝试过嵌套过滤器但没有成功,有人知道怎么做吗 这是我的密码: <input ng-model="filFecha" /> <tr ng-repeat="pedido in pedidos | filter:{codigo:filCodigo, tercero

我有一个表,我用它过滤。其中一列是日期,我喜欢以dd/MM/yyyy的格式显示日期,所以所有的日期列都是这样的,但是当我在过滤器输入中输入日期时,它不知道应该以其他格式搜索,所以它找不到要查找的日期

我尝试过嵌套过滤器但没有成功,有人知道怎么做吗

这是我的密码:

<input ng-model="filFecha"  />

<tr ng-repeat="pedido in pedidos | 
    filter:{codigo:filCodigo,
    tercero:filTercero, 
    fechaCreacion: ($filter('date')(filFecha, 'dd/MM/yyyy')), 
    estado:filEstado} | 
    orderBy: orderProp">

    <td class="corta">{{pedido.fechaCreacion | date:'dd/MM/yyyy'}}</td>
    <td class="corta">{{pedido.estado}}</td>
</tr> 

这里有一个简单的例子:

try momentjs他们的库使得格式化日期变得非常简单和容易。因此,当你得到一个输入日期时,只需使用以下代码行:

var formattedDate = moment(inputDate, ['YYYYMMdd', 'MM-dd-YYYY', 'dd-MM-YYYY').format('MM/dd/YYYY');
这将获取输入日期,并尝试将其与字符串数组中的一种格式匹配,如果识别出一种格式,则将其格式化为传递给format函数的字符串

如果$scope.pedido.fechacreation是您尝试格式化的日期,请尝试以下操作:

{{moment(pedido.fechaCreacion, [expectedFormats]).format('MM/dd/YYYY')}}

我已经建立了一个自定义过滤器,我认为它解决了您的问题

myApp.filter('dateFilter', function(){
    return function(arr, field){
        var filtered = [];        
        angular.forEach(arr, function(item){            
            if(moment(item.fechaCreacion).format('DD/MM/YYYY').indexOf(field) > -1)
                filtered.push(item);
        });
        return filtered;
    }
});
它循环遍历$scope.pedidos中的每个项目,并使用矩.js将fechacreation转换为所需格式DD/MM/YYYY的字符串。然后检查该字符串中的任何位置是否存在filFecha的值,如果存在,则将其添加到过滤数组中。HTML如下所示:

<tr ng-repeat="pedido in pedidos | 
    filter:{codigo:filCodigo, tercero:filTercero,
    estado:filEstado} | 
    dateFilter: filFecha |
    orderBy: orderProp">

看看。

我喜欢自定义过滤器,但想将其扩展为更灵活的过滤器。我也不想使用moment,因为这不是我用来在UI上格式化日期的方式

核对要点

签出JSFIDLE


Hmmm不能处理ng repeat语句,我可以在没有momentjs的情况下使用角度过滤器进行良好的格式化,{{pedido.fechacreation | date:'dd/MM/yyyyy'}这非常有效,问题是filFecha,如果我输入2014年5月29日,它不会被过滤,但2014年5月29日会进行工作{{momentpedido.fechacreation,'dd/MM/yyyyy'}那么也许吧?
angular.module('dateFilter', []).filter('dateFilter', function ($filter) {
    return function (array, config) {

        if (config === undefined || config.field === undefined || config.format === undefined || config.property === undefined)
            return array;

        var filtered = [];
        angular.forEach(array, function (item) {
            if ($filter('date')(new Date(getPropByString(item, config.property)), config.format).indexOf(config.field) > -1)
                filtered.push(item);
        });

        return filtered;
    }