我有这张桌子。我想按日期(日,月)排序。我可以在使用以下代码的那天排序,但我无法按orderBy:['day','month']
对日期和月份进行排序。因此它显示在2015年7月8日之前的2015年6月9日。可以给我线索有什么不对吗?
<h1>Reservations</h1>
<table class="table">
<thead>
<tr>
<th ng-repeat="heading in data1.headings">{{heading}}</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="reservation in reservations|orderBy:'day'" ng-show="reservation.is_approved">
<td>{{reservation.id}}</td>
<td>{{reservation.user.fb_id}}</td>
<td>{{reservation.user.name}}</td>
<td>{{reservation.user.phone}}</td>
<td>{{reservation.user.email}}</td>
<td>{{reservation.day}}/{{reservation.month}}/{{reservation.year}}</td>
</tr>
</tbody>
</table>
答案 0 :(得分:0)
您需要将日期转换为Javascript Date对象,然后才能进行正确的排序。
所以在您的控制器中执行:(更新您的需求)
2032.95
您可以使用many formats创建Javascript日期对象。
之后,您应该能够按日期排序。
reservations[i].date = new Date(year, month, day);
答案 1 :(得分:0)
这是因为orderBy不知道注入日期。它只是按数字排序。您应该添加到应用过滤器以解析数据以更正日期并对数组进行排序:
app.filter('filterByDate', function filterByDate() {
return function(array, descending) {
var order = descending ? 1 : -1;
array.sort(function(a, b) {
return (new Date(b.year, b.month, b.day) - new Date(a.year, a.month, a.day)) * order;
});
return array;
};
});
并使用它:
<tr ng-repeat="reservation in reservations|filterByDate" ng-show="reservation.is_approved">
<td>{{reservation.id}}</td>
<td>{{reservation.user.fb_id}}</td>
<td>{{reservation.user.name}}</td>
<td>{{reservation.user.phone}}</td>
<td>{{reservation.user.email}}</td>
<td>{{reservation.day}}/{{reservation.month}}/{{reservation.year}}</td>
</tr>
或者如果您想通过降序添加参数“true”来对日期进行排序:
<tr ng-repeat="reservation in reservations|filterByDate:true" ng-show="reservation.is_approved">
<td>{{reservation.id}}</td>
<td>{{reservation.user.fb_id}}</td>
<td>{{reservation.user.name}}</td>
<td>{{reservation.user.phone}}</td>
<td>{{reservation.user.email}}</td>
<td>{{reservation.day}}/{{reservation.month}}/{{reservation.year}}</td>
</tr>
答案 2 :(得分:0)
默认顺序使用升序排序,你可以使用['day',' - month']按月降序排序 https://docs.angularjs.org/api/ng/filter/orderBy