AngularJS 按日期排序

AngularJS orderBy date

我有这样的东西:

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

这应该适合你:

<div ng-repeat="i in inv | orderBy:'-dueDate'">
  <p>{{i.dueDate}}</p>
</div>

您必须定义自定义程序函数,然后在 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。该函数基本上重新排序日期字符串,以便年在前,月在后,日在后。如果您使用 moment.js 或类似的库,则可以改用它们的解析器。

您需要将字符串转换为 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