AngularJS DateRange - 如何包含结束日期

AngularJS DateRange - how to include the end date

我在 angular 数据集上使用数据范围过滤器,但它不是 'including' 结束日期。我必须从日期选择器开始 select +1 天才能正常工作。开始日期工作正常。

此代码仅为示例而非生产...

JAVASCRIPT

// parse a date in dd-mm-yyyy format
function parseDate(input) {
  var parts = input.split('-');
  return new Date(parts[2], parts[1]-1, parts[0]); 
}

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

        return arrayToReturn;
 };
});

HTML

From:<input  ng-model="datef"  type="text" placeholder="" />
To:<input  ng-model="datet"  type="text" placeholder="" />

<tr ng-repeat="order in orders | rangeFilter:datef:datet">
    <td>{{order.date1 * 1000 | date:'dd-MM-yyyy'}}</td>
</tr>

范围/控制器

nameSpace.controller('MyController', function MyController($scope) {
  $scope.datef = "27-05-2010"
  $scope.datet = "29-07-2015";
  $scope.orders = [
  {
    "date1": 1306281600
  },
  {
    "date1": 1196467200
  },
  {
    "date1": 1406505600
  },
  {
    "date1": 1406592000
  }]
});

我认为您没有正确传递 "to" 参数。 正如官方文档所述(https://docs.angularjs.org/api/ng/filter/filter),每个过滤器的 returning 函数接受 3 个参数,如下所示: return 函数(数组、表达式、比较器){...} 要同时传递 "from" 和 "to" 参数,您应该使用对象将它们传递给函数:

HTML

From:<input  ng-model="datef"  type="text" placeholder="" />
To:<input  ng-model="datet"  type="text" placeholder="" />

<tr ng-repeat="order in orders | rangeFilterr:{from: datef, to: datet}">
<td>{{order.date1 * 1000 | date:'dd-MM-yyyy'}}</td>
</tr>

JAVASCRIPT

// parse a date in dd-mm-yyyy format
function parseDate(input) {
  var parts = input.split('-');
  return new Date(parts[2], parts[1]-1, parts[0]); 
}

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

        return arrayToReturn;
 };
});