【问题标题】:AngularJS DateRange - how to include the end dateAngularJS DateRange - 如何包含结束日期
【发布时间】:2016-03-03 11:30:12
【问题描述】:

我在角度数据集上使用数据范围过滤器,但它不“包括”结束日期。我必须从日期选择器中选择 +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
  }]
});

【问题讨论】:

    标签: javascript angularjs date-range


    【解决方案1】:

    我认为您没有正确传递“to”参数。 正如官方文档所说(https://docs.angularjs.org/api/ng/filter/filter),每个过滤器的返回函数接受 3 个参数,如下所示: 返回函数(数组,表达式,比较器){...} 要同时传递“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;
     };
    });
    

    【讨论】:

    • 嗨,我刚刚尝试了对 rangeFilterr:{from: datef, end: date}var dt = parseDate(obj. end); 仍然没有快乐。它会过滤,但例如要包含 29-07-2014,我必须将结束日期发送到 30-07-2014
    • 对不起,我拼错了变量名,试试 rangeFilterr:{from: datef, to: datet}var dt = parseDate(obj.to) ;
    猜你喜欢
    • 2016-10-19
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    相关资源
    最近更新 更多