OrderBy Date值,它们只是Angular JS中的字符串

8 javascript date angularjs angularjs-orderby

我试图按日期订购一些数据,虽然日期只是字符串,格式为dd-mm-yyyy.

我做了一个过滤器,它转换了普通的数字字符串(在美国的日期格式,我想要英国日期格式),例如01272012到27-01-2014,但当我尝试订购它时,它仍然只看到它们数字字符串,所以01-01-1990将在02-01-2014之前出现.

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

谢谢!

更新

我发现如果日期格式为yyyy-mm-dd,日期会自动排序.然后我用来orderBy:['date']订购数据,只在显示数据时使用我的原始过滤器.

我最终不得不撤消我的数据,显示最近的日期.为了达到这个目的,我-在我的订单中添加了一个声明:orderBy:['-date'].

Dav*_*nek 8

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

ng-repeat="item in items | orderBy: orderByDate"
Run Code Online (Sandbox Code Playgroud)

然后在你的控制器上你将定义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;
};
Run Code Online (Sandbox Code Playgroud)

该功能的实现取决于您.我选择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;
};
Run Code Online (Sandbox Code Playgroud)