8

我正在尝试按日期排序一些数据,尽管日期只是字符串,格式为 dd-mm-yyyy。

我做了一个过滤器,它转换了纯数字字符串(在美国日期格式中,我想要英国日期格式),例如 01272012 到 27-01-2014,但是当我尝试订购它们时,它仍然只将它们视为数字字符串,因此 01-01-1990 将出现在 02-01-2014 之前。

关于如何在过滤器中执行此操作的任何建议?

谢谢!

更新

我发现如果日期格式是 yyyy-mm-dd,日期会自动排序。然后我习惯于orderBy:['date']对数据进行排序,仅在显示数据时使用我原来的过滤器。

我最终不得不反转我的数据,显示最近的日期。为了实现这一点-,我在 orderBy 语句中添加了一个:orderBy:['-date']

4

2 回答 2

8

因为orderBy过滤器,你可以使用它。您的 ng-repear 可能看起来与此类似:

ng-repeat="item in items | orderBy: orderByDate"

然后在您的控制器上定义orderByDate函数:

$scope.orderByDate = function(item) {
    var parts = item.dateString.split('-');
    var date = new Date(parseInt(parts[2], 
                        parseInt(parts[1]), 
                        parseInt(parts[0]));

    return date;
};

该功能的实现取决于您。我选择Date从字符串中创建。然后,您从函数返回的对象orderByDate使用 <、=、> 运算符进行排序。

编辑:解决方案:reverse

由于:reverse不能与作为参数传递的函数一起使用,您可以实现自定义函数以返回反转值本身。在这种情况下使用Date是不可能的,我会构造一个数字然后用减号返回它:

$scope.orderByDate = function(item) {
    var parts = item.dateString.split('-');
    var number = parseInt(parts[2] + parts[1] + parts[0]);

    return -number;
};
于 2014-08-14T11:00:57.580 回答
0

var now = Date.now(); 现在 = $filter('date')(现在,'yyyy-MM-ddThh:mm:ss+hh:mm');

然后您可以使用相应的格式化日期进行数据过滤

于 2014-08-14T11:46:25.567 回答