【问题标题】:AngularJS orderBy dateAngularJS orderBy 日期
【发布时间】:2015-08-18 19:04:34
【问题描述】:

我有这样的事情:

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

【问题讨论】:

标签: angularjs angularjs-orderby


【解决方案1】:

您必须定义一个自定义函数,然后在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 或类似的库,你可以使用他们的解析器。

【讨论】:

  • 您能否确认dueDate 排序正确?
  • 对不起,不明白你的意思。当然,仅使用orderBy:'dueDate' 并不能解决问题:这些值将被排序为字符串,而不是日期。因此,例如,“2015 年 1 月 1 日”将被视为“早于”“2014 年 2 月 31 日”。
  • 这个答案更适合我的需要,因为日期是作为字符串接收的。谢谢@raina77ow
【解决方案2】:

这应该适合你:

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

【讨论】:

    【解决方案3】:

    您需要将字符串转换为 YYYY-MM-DD 格式

    &lt;li ng-repeat="item in inv | orderBy:orderByDate"&gt;{{item.name}} &lt;/li&gt;

    $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

    【讨论】:

      猜你喜欢
      • 2015-04-22
      • 1970-01-01
      • 2013-05-03
      • 2015-04-12
      • 1970-01-01
      • 2015-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多