2014-11-03 115 views
0

我正在尝试使用日期范围来筛选ng-repeat。如何使用AngularJS过滤日期范围?

到目前为止,我已经安装了Daterangepicker,它会在触发选取器的输入的ng模型中返回一个包含两个属性(startDate和endDate)的对象(ng-model="dates")。

它看起来像这样:

Object 
    endDate: 
    k_d: Mon Nov 03 2014 23:59:59 GMT+0300 (E. Africa Standard Time) 
    _isAMomentObject: true 
    _isUTC: false 
    _isValid: true 
    _locale: j 
    _pf: Object_ 
    _proto__: k 
startDate: k_d: Sat Oct 04 2014 00:00:00 GMT+0300 (E. Africa Standard Time) 
    _isAMomentObject: true 
    _isUTC: false 
    _isValid: true 
    _locale: j 
    _pf: Object_ 
    _proto__: k 

在另一方面我有我的NG-重复,列出对象的数组,具有date属性他们中的每一个。

<div class="row msf-row" 
    ng-repeat="record in recordlist | filter:dateFilter | limitTo : -100"> 
     <div class="col-md-1">{{record.date}}</div> 
</div> 

我已经建立了一个过滤器,以试图通过一系列对其进行过滤:

$scope.dateFilter = function (record) { 
    return record.date >= $scope.dates.startDate && record.date <= $scope.dates.endDate; 
}; 

但到目前为止过滤器不能正常工作。我错过了什么?

编辑

我已经意识到record.date是一个字符串,而的startDate和结束日期的那一刻()对象。有没有什么办法可以将record.date解析成filter()对象之前的过滤器函数?

EDIT 2

定了!我不得不解析result.date作为momentjs对象,也包括这样的正确的格式:moment(string, format)

$scope.dateFilter = function (record) { 
    return 
     moment(record.date, "DD[/]MM[/]YYYY") >= $scope.dates.startDate 
     && 
     moment(record.date, "DD[/]MM[/]YYYY") <= $scope.dates.endDate; 
}; 

回答

3

看着你的约会对象,就好像它是不是JavaScript的原生“日期”类型。可能是这条线上的作品?

$scope.dateFilter = function (record) { 
    var startDate = new Date($scope.dates.startDate.k_d); 
    var endDate = new Date($scope.dates.endDate.k_d); 

    return record.date >= startDate && record.date <= endDate; 
}; 

分享一个jsfiddle可能会更有助于找出确切的问题。

+0

其实你是对的。 startDate和endDate是moment()实例,但record.date是一个字符串。我能否以某种方式解析它()? – 2014-11-03 18:00:06

+0

我以前没有使用过moment.js,但是看着他们的API,你可以做一些像$ scope.dates.startDate.format()这样的将时刻转换为日期字符串的东西。或者,您可以使用moment构造函数(如moment(record.date))将日期字符串转换为时刻。 – Nripendra 2014-11-04 01:07:53