我想知道是否有人可以帮助我。我目前正在尝试在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 " >
答案 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。