Angularjs orderBy filter 无法正确过滤日期

Angularjs orderBy filter does not filter dates correctly

本文关键字:过滤 日期 orderBy filter Angularjs      更新时间:2023-09-26

我在 angularjs orderBy filter 方面遇到了问题。我正在尝试按日期升序或降序对项目列表进行排序。

这就是我的列表的样子

...
<li ng-repeat="issue in content | myStatusFilter : selectedStatuses | orderBy : 'date' : selectedOption" class="toggle-list__row">
    <issue data="issue" />
</li>
...
内容

是一个数组,内容中的每个问题都有一个日期,此日期保存为字符串。当所选选项为真时,这就是我得到的

  1. 第三期 - 31.01.2015
  2. 第二期 - 21.05.2015
  3. 第4期 - 10.06.2015
  4. 问题 1 - 04.05.2014 ->实际上应该是列表中的第一个

当所选选项为假时,这是输出

  1. 问题 1 - 04.05.2014 - 应该是最后一个
  2. 第4期 - 10.06.2015
  3. 第二期 - 21.05.2015
  4. 第三期 - 31.01.2015

你能帮我,告诉我错误在哪里,我该如何解决这个问题。

提前感谢

你的日期是字符串,而不是正确的javascript日期对象。 既然你说你不能在服务器上解决这个问题,你至少可以在控制器或角度服务中解决这个问题。

无论您在哪里获得包含日期的对象,都可以遍历这些对象并将它们转换为实际日期,例如:

$http.get('something')
     .then(function(result) {
         result.forEach(function(item) {
            item.date = new Date(item.date.replace( /('d{2}).('d{2}).('d{4})/, "$2/$1/$3")
         });
     });
您可以按

过滤器将函数传递给订单。在该函数中,将字符串转换为日期:

$scope.myDateOrderFunction = function(item) {
   var parts = item.date.split('.');
   return new Date(parts[2], parts[1], parts[0]);
};

然后你可以从视图中调用它:

<li ng-repeat="issue in content | myStatusFilter : selectedStatuses | orderBy : myDateOrderFunction : selectedOption" class="toggle-list__row">
    <issue data="issue" />
</li>

您的日期按字母顺序排序,要么将它们设为 Date 对象,要么将它们存储为"yyyy.mm.dd"

这是一个例子(注意,最初不是我写的,但我已经更新了)

<div ng-app>
      <div ng:controller="Main">
      <div ng:repeat="item in items | orderBy:'date'">{{$index}}: {{item.date | date}}</div>
    </div>
</div>
function Main($scope) {
    $scope.items = [
        {date: new Date('12/23/2013')},
        {date: new Date('12/23/2011')},
        {date: new Date('12/23/2010')},
        {date: new Date('12/23/2015')}
    ];
}

如果你的日期来自后端,你需要编写一个服务/工厂来获取这些,那么你会有类似$scope.issues = IssueService.getIssues()的东西。这需要返回一个数组。