AngularJS DATERANGE - 如何将结束日期 [英] AngularJS DateRange - how to include the end date

查看:109
本文介绍了AngularJS DATERANGE - 如何将结束日期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的角度数据集的数据范围过滤器,但它是不是包括结束日期。我必须从日期选择器选择1天它才能正常工作。起始日期是工作的罚款。

这code为例子,而不是只生产...

JAVASCRIPT

  //解析在DD-MM-yyyy格式的日期
功能parseDate(输入){
  变种份= input.split(' - ');
  返回新日期(份[2],份[1] -1,份[0]);
}nameSpace.filter(rangeFilter功能(){
  返回功能(物品,从,到){
        变种DF = parseDate(从);
        VAR DT = parseDate(地);
        变种arrayToReturn = [];
        对于(VAR I = 0; I< items.length;我++){
            变种TF =新的日期(项目[I] .date1 * 1000);
            如果(TF> = DF&放大器;&安培; TF< D​​T){
                arrayToReturn.push(项目[I]);
            }
        }        返回arrayToReturn;
 };
});

HTML

 来源:<输入NG模型=datef类型=文本占位符=/>
要:其中,输入NG模型=datet类型=文本占位符=/>< TR NG重复=为了订单| rangeFilter:datef:datet>
    < TD> {{order.date1 * 1000 |日期:'DD-MM-YYYY'}}< / TD>
< / TR>

SCOPE /控制器

  nameSpace.controller('myController的',功能myController的($范围){
  $ scope.datef =27-05-2010
  $ scope.datet =29-07-2015;
  $ scope.orders = [
  {
    日期1:1306281600
  },
  {
    日期1:1196467200
  },
  {
    日期1:1406505600
  },
  {
    日期1:1406592000
  }]
});


解决方案

我觉得你没有正确地传递到参数。
作为官方文件说,( https://docs.angularjs.org/api/ng/filter /过滤器),每个滤波器的返回函数接受3 PARAMS是这样的:
    返回功能(数组,前pression,比较器){...}
这两个,从通和到的参数,你应该将它们使用一个对象传递给函数:

HTML

 来源:<输入NG模型=datef类型=文本占位符=/>
要:其中,输入NG模型=datet类型=文本占位符=/>< TR NG重复=为了订单| rangeFilterr:{来源:datef到:datet}>
< TD> {{order.date1 * 1000 |日期:'DD-MM-YYYY'}}< / TD>
< / TR>

JAVASCRIPT

  //解析在DD-MM-yyyy格式的日期
功能parseDate(输入){
  变种份= input.split(' - ');
  返回新日期(份[2],份[1] -1,份[0]);
}nameSpace.filter(rangeFilter功能(){
  返回功能(项目的obj){
        变种DF = parseDate(obj.from);
        VAR DT = parseDate(obj.to);
        变种arrayToReturn = [];
        对于(VAR I = 0; I< items.length;我++){
            变种TF =新的日期(项目[I] .date1 * 1000);
            如果(TF> = DF&放大器;&安培; TF< D​​T){
                arrayToReturn.push(项目[I]);
            }
        }        返回arrayToReturn;
 };
});

I'm using a data range filter on an angular dataset, however it is not 'including' the end date. I have to select +1 day from the date picker for it to work properly. The start date is working fine.

This code is example only and not production...

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>

SCOPE / CONTROLLER

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
  }]
});

解决方案

I think you're not passing the "to" parameter correctly. As the official Documentation says(https://docs.angularjs.org/api/ng/filter/filter), the returning function of each filter accept 3 params like this: return function(array, expression, comparator){...} To pass both "from" and "to" parameters, you should pass them to the function using an object:

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;
 };
});

这篇关于AngularJS DATERANGE - 如何将结束日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆