AngularJS orderBy日期

时间:2015-08-18 19:04:34

标签: angularjs angularjs-orderby

我有这样的事情:

  <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"
    }
 ];

3 个答案:

答案 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