Javascript 如何按时间范围过滤ng重复数据?

Javascript 如何按时间范围过滤ng重复数据?,javascript,json,angularjs,Javascript,Json,Angularjs,我正在创建一个应用程序,它将使用第三方API提供航班列表。我有一个问题,从不同的日期和时间格式的两个时间之间的过滤,我已经仔细阅读了很多教程,但都是使用日期只,但我需要文件服务器使用不同的日期和时间格式的时间 JSON "Combination": [ "OutboundLeg" :{ "DepartureDateTime": "07/14/2015 12:00" } "OutboundLeg" :{ "De

我正在创建一个应用程序,它将使用第三方API提供航班列表。我有一个问题,从不同的日期和时间格式的两个时间之间的过滤,我已经仔细阅读了很多教程,但都是使用日期只,但我需要文件服务器使用不同的日期和时间格式的时间

JSON

"Combination": [        
    "OutboundLeg" :{
            "DepartureDateTime": "07/14/2015 12:00"
    }
    "OutboundLeg" :{
            "DepartureDateTime": "07/15/2015 10:55"
    }
    "OutboundLeg" :{
            "DepartureDateTime": "07/18/2015 12:10"
    }
    "OutboundLeg" :{
            "DepartureDateTime": "07/14/2015 10:10"
    }
    "OutboundLeg" :{
            "DepartureDateTime": "07/18/2015 12:00"
    }
]
HTML

<div ng-repeat="data in Combination | filterBtwnTime: ??? ">
    <td>{{data.OutboundLeg.DepartureDateTime}}</td> 
</div>

{{data.OutboundLeg.DepartureDateTime}

如何实现此目的?

您可以使用
日期
过滤器,该过滤器允许您根据请求的格式样式格式化日期。日期格式化程序提供了几个内置选项

如果没有传递日期格式,则默认显示
mediumDate
(如下所示)

以下是内置的可本地化格式:

{{ data | date:'medium' }} <!-- Aug 09, 2013 12:09:02 PM -->
{{ data | date:'short' }} <!-- 8/9/13 12:09 PM -->
{{ data | date:'fullDate' }} <!-- Thursday, August 09, 2013 -->
{{ data | date:'longDate' }} <!-- August 09, 2013 -->
{{ data | date:'mediumDate' }} <!-- Aug 09, 2013 -->
{{ data | date:'shortDate' }} <!-- 8/9/13 -->
{{ data | date:'mediumTime' }} <!-- 12:09:02 PM -->
{{ data | date:'shortTime' }} <!-- 12:09 PM -->
{{数据|日期:'medium'}
{{数据|日期:'short'}
{{数据|日期:'fullDate'}
{{数据|日期:'longDate'}
{{数据|日期:'mediumDate'}
{{数据|日期:'shortDate'}
{{data}日期:'mediumTime'}
{{数据|日期:'shortTime'}
所以你可以试试这个:

<div ng-repeat="data in Combination | date: 'medium' ">
    <td>{{data.OutboundLeg.DepartureDateTime}}</td> 
</div>

{{data.OutboundLeg.DepartureDateTime}

您可以使用如下函数作为过滤器

HTML


首先,您拥有的数据不正确,因为您有一个具有相同键的对象,因此只考虑OutboundLeg的最后一个值。您有一个包含一个对象的数组,该对象多次具有相同的键

您需要一个对象数组,因为角度过滤器只对数组起作用

模板:

<div ng-app="app"> 
<div ng-controller="MyController"> 
    <div ng-repeat="data in Combination | dateFilter:startDate:endDate ">
        <div ng-bind="data.DepartureDateTime "></div> 
    </div>
</div>

过滤器:

function dateFilter() {
  return function(input, start, end) {
    var inputDate = new Date(input),
        startDate = new Date(start),
        endDate = new Date(end),
        result = [];

    for (var i=0, len = input.length; i < len; i++) {
        inputDate = new Date(input[i].DepartureDateTime);            
        if (startDate < inputDate && inputDate < endDate) {
           result.push(input[i]);
        }  
    }       
    return result;      

  }
}
函数dateFilter(){
返回功能(输入、开始、结束){
var inputDate=新日期(输入),
开始日期=新日期(开始),
endDate=新日期(结束),
结果=[];
对于(变量i=0,len=input.length;i
完整的代码可以在我创建的fiddle中找到,它对数组进行了一个小的更新,过滤定义的开始日期和结束日期之间的日期。例如,您可以根据需要对此进行调整


更新-使用日期过滤器对ng重复进行过滤

使用日期过滤器可能会有帮助:newDate | Date:'yyyy-MM-dd h:MM:ss'如何过滤时间列表的范围?如何使用ng click将值传递给过滤器?@Silambu我认为您可以在ngclick上存储其他信息,并在过滤功能中使用它确定了!但我需要在两次之间过滤。总有一天会的different@Silambu你的意思是:@Silambu“但我需要在两次之间进行过滤。”你应该能够自己处理这个问题……我需要基于时间进行过滤,因为有时它会是不同的日期。我不理解这一点:“基于时间的过滤”?因为小提琴中的是$scope.startDate=“07/14/2015 10:00”$scope.endDate=“07/14/2015 20:00”;它只过滤10:00和20:00之间的日期,因此是基于时间的StartDate=new Date(开始),将创建一个同时考虑时间的日期对象。这不是你想要的吗?我必须在10:00到20:00之间过滤所有日期。如果可能的话,请让我知道。谢谢大家!@Silambu您只需解析字符串,或者如果将日期对象转换为日期,则从日期对象中提取小时+分钟,并进行比较
<div ng-app="app"> 
<div ng-controller="MyController"> 
    <div ng-repeat="data in Combination | dateFilter:startDate:endDate ">
        <div ng-bind="data.DepartureDateTime "></div> 
    </div>
</div>
function dateFilter() {
  return function(input, start, end) {
    var inputDate = new Date(input),
        startDate = new Date(start),
        endDate = new Date(end),
        result = [];

    for (var i=0, len = input.length; i < len; i++) {
        inputDate = new Date(input[i].DepartureDateTime);            
        if (startDate < inputDate && inputDate < endDate) {
           result.push(input[i]);
        }  
    }       
    return result;      

  }
}