我有这样的事情:
<div ng-repeat="i in inv">
<p>{{i.dueDate}}</p>
</div>
我想先按最早的日期订购。我知道有一种方法可以做到,但我无法弄明白。有人可以帮忙吗?
以下是示例js:
$scope.inv = [
{
name: "Paul",
dueDate: "5/21/2014"
},
{
name: "Dan",
dueDate: "5/22/2014"
},
{
name: "Randy",
dueDate: "1/12/2015"
}
];
答案 0 :(得分:3)
您必须定义自定义程序函数,然后在orderBy
表达式中使用它。例如:
$scope.dueDateFormatter = function(i) {
var dateParts = i.dueDate.split(/\//);
return dateParts[2]
+ '-' + (dateParts[0] < 10 ? '0' + dateParts[0] : dateParts[0])
+ '-' + (dateParts[1] < 10 ? '0' + dateParts[1] : dateParts[1]);
};
<div ng-repeat="i in inv | orderBy:dueDateFormatter">
<p>{{i.dueDate}}</p>
</div>
Demo。该函数基本上重新排序日期字符串,因此Year排在第一位,第二位是第二位,第二位是最后一位。如果您使用moment.js
或类似的库,则可以使用其解析器。
答案 1 :(得分:1)
这应该适合你:
<div ng-repeat="i in inv | orderBy:'-dueDate'">
<p>{{i.dueDate}}</p>
</div>
答案 2 :(得分:0)
您需要将字符串转换为YYYY-MM-DD格式
<li ng-repeat="item in inv | orderBy:orderByDate">{{item.name}} </li>
$scope.orderByDate = function(item) {
var parts = item.dueDate.split('/');
var date = new Date(parseInt(parts[2], parseInt(parts[0]), parseInt(parts[1])));
return date;
};
<强> 演示 强> http://plnkr.co/edit/o6fCDyiqkkU9YVWwZC09?p=preview