角度日期范围过滤器

时间:2014-09-26 08:40:23

标签: angularjs angularjs-scope angular-filters

我想知道是否有人可以帮助我。我目前正在尝试在Angular中使用日期过滤器。我可能会以完全错误的方式解决这个问题,但我想我会问。

我目前通过一系列对象进行ng-repeat循环。我的对象有以下字段:title,sentBy和recevied。收到的是UTC格式,我的过滤器基本上也采用utc格式的两个输入作为开始和结束日期。然后,过滤器检查收到的是否大于或等于开始日期或小于或等于结束日期。我的问题是过滤器的输入是整个对象的输入。我不知道如何访问过滤器内接收到的对象字段来进行比较。我尝试了input.received但它似乎没有用。下面是我的代码示例。

.filter('dateRange', function(){

return function(input, startDate, endDate) {

    if(input.received >= startDate && input <= endDate){
        return input;
    }

};

})

正如我所说,我可能会对此完全错误,但我们将非常感谢任何帮助。

编辑: 我的HTML代码简单如下:

    <div ng-repeat="message in messages | dateRange: startDate : endDate " >

2 个答案:

答案 0 :(得分:0)

尝试以下代码。你需要比较时间。

.filter('dateRange', function(){

    return function(input, startDate, endDate) {
       angular.forEach(input, function(obj){

        if(obj.received.getTime() >= startDate.getTime() && obj.received.getTime() <= endDate.getTime())   {
            return obj;
        }
       });

    };
});

<div ng-bind="messages | dateRange: startDate : endDate " ></div>
   or
<div> {{messages | dateRange: startDate : endDate }}</div>

答案 1 :(得分:0)

在您的代码中,过滤器正在处理 messages 数组,这意味着第一个参数( input )是数组,返回类型也必须是数组。看看here

您的代码应该是这样的:

 <div ng-repeat="message in messages | dateRange: startDate : endDate" >

您的过滤器是:

.filter('dateRange', function() {
   return function(input, startDate, endDate) {

      var retArray = [];

      angular.forEach(input, function(obj){
        var receivedDate = obj.received;

        if(receivedDate >= startDate && receivedDate <= endDate) {
            retArray.push(obj);         
        }
      });

      return retArray;
   };
}); 

这是plunker