2016-05-24 5 views
1

ここに私の問題があります。私は2つの日付を比較し、私のng-ifが真であるすべての日付を表示したいと考えています。しかし、私のuser.created_atのうちの1つだけがtimeより劣っていると私のng-ifが偽を返し、何も表示されないので、これは機能しません。ng-repeatの日付比較

<ul ng-repeat="user in userticket track by $index" ng-if="user.created_at > time" > 
     <li class="row ticketlist">{{user.created_at | amDateFormat:'YYYY.MM.DD'}}</li> 
</ul> 

と私のコントローラで:

$scope.time = "2015-06"; 

答えて

1

使用Date objectsすべての回。そして、あなたは私がどのような形式user.created_at見ることはできませんが、それはあなたがあまりにもすることを変換/解析することができますDateオブジェクトがない場合は、直接

$scope.time = new Date(2015, 5); 

を比較することができます。

https://jsfiddle.net/3pvk51xu/

+0

が機能していない、私はすでにそれを変換しようとしたが、 'ので、動作していませんng-if'結果がng-repeatの結果が偽である場合、結果は返されません – moskitos

+0

確かに動作します:https://jsfiddle.net/3pvk51xu/ – fhollste

+0

ええ、それは大変ありがとうございます! – moskitos

1

ベストな方法は、カスタムフィルタを作成することです。 ng-repeat filtering data by date rangeを参照してください。

これがソリューションです:

JSFIDDLE

HTML

<input ng-model="dateFrom" type="text"/> 
<input ng-model="dateTo" type="text"/> 
<tr ng-repeat="order in orders | myfilter:dateFrom:dateTo"> 
    <td>{{order.date1 * 1000 | date:'dd-MM-yyyy'}}</td> 
    <td>{{order.date2 * 1000 | date:'dd-MM-yyyy'}}</td> 
</tr> 

javascriptの

function parseDate(input) { 
    var parts = input.split('-'); 
    return new Date(parts[2], parts[1]-1, parts[0]); 
} 

nameSpace.filter("myfilter", function() { 
    return function(items, from, to) { 
     var df = parseDate(from); 
     var dt = parseDate(to); 
     var result = [];   
     for (var i=0; i<items.length; i++){ 
      var tf = new Date(items[i].date1 * 1000), 
       tt = new Date(items[i].date2 * 1000); 
      if (tf > df && tt < dt) { 
       result.push(items[i]); 
      } 
     }    
     return result; 
    }; 
}); 
also, i changed the timestamp data type from string to numbres. 

    $scope.orders = [ 
    { 
    "date1": 1306487800, 
    "date2": 1406587800 
    }, 
    { 
    "date1": 1196487800, 
    "date2": 1406597800 
    }]