angularjs - ng-repeat按日期范围过滤数据

标签 angularjs angularjs-ng-repeat

我正在尝试通过键入日期范围来过滤包含时间戳的列表

例如:

JSFIDDLE

html

<div ng-app="tst">
    <div ng-controller="MyController">
        <table>
            <tr>
                <td>From:
                    <input ng-model="query.date1" type="text" placeholder="" />
                </td>
                <td>To:
                    <input ng-model="query.date2" type="text" placeholder="" />
                </td>
            </tr>

            <tr ng-repeat="order in orders |filter:query">
                <td>{{order.date1 * 1000 | date:'dd-MM-yyyy'}}</td>
                <td>{{order.date2 * 1000 | date:'dd-MM-yyyy'}}</td>
            </tr>
        </table>
    </div>
</div>

javascript
var nameSpace = angular.module('tst',[]);

nameSpace.controller('MyController', function MyController($scope) {
  $scope.orders = [
  {
    "date1":"1306487800",
    "date2":"1406587800"
  },
  {
    "date1":"1196487800",
    "date2":"1406597800"
  }]
});

我希望能够用值填充“发件人”字段:27-05-2010

并且“To”字段的值为:29-07-2015

并仅获取该范围内的记录。

(示例中的第一条记录)。

谢谢分配
阿维

最佳答案

您可以创建一个自定义过滤器来实现此目的。

JSFIDDLE

html

<input ng-model="dateFrom" type="text"/>
<input ng-model="dateTo" type="text"/>
<tr ng-repeat="order in orders | myfilter:dateFrom:dateTo">
  <td>{{order.date1 * 1000 | date:'dd-MM-yyyy'}}</td>
  <td>{{order.date2 * 1000 | date:'dd-MM-yyyy'}}</td>
</tr>

javascript
function parseDate(input) {
  var parts = input.split('-');
  return new Date(parts[2], parts[1]-1, parts[0]); 
}

nameSpace.filter("myfilter", function() {
  return function(items, from, to) {
        var df = parseDate(from);
        var dt = parseDate(to);
        var result = [];        
        for (var i=0; i<items.length; i++){
            var tf = new Date(items[i].date1 * 1000),
                tt = new Date(items[i].date2 * 1000);
            if (tf > df && tt < dt)  {
                result.push(items[i]);
            }
        }            
        return result;
  };
});

另外,我将时间戳记数据类型从字符串更改为数字。
  $scope.orders = [
  {
    "date1": 1306487800,
    "date2": 1406587800
  },
  {
    "date1": 1196487800,
    "date2": 1406597800
  }]

关于angularjs - ng-repeat按日期范围过滤数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25515431/

相关文章:

javascript - AngularJS:按数字范围重复和过滤

angularjs - 使用 AngularFire 显示来自 Firebase 的用户数据

javascript - Angular Ng-重复分组

javascript - Angular JS 将数据从工厂推送到 Controller

angularjs - 在 AngularJS 中,为什么我不能在 src 旁边指定图像的宽度和高度?

AngularJS:ng-init 的范围

angularjs - Protractor addMockModule 附加参数不起作用?

Angularjs:引用模板中对象数组中的元素

javascript - Angular ng-repeat 的值错误?

javascript - RxJS - 为什么我要使用 throwError 而不是简单地抛出错误?