order - Date值,它们在Angular JS中只是字符串

OrderBy Date values, which are just strings in Angular JS

本文关键字:JS Angular 字符串 Date order      更新时间:2023-09-26

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

我做了一个过滤器,它转换了普通的数字字符串(在美国日期格式中,我想要英国日期格式),例如01272012到27-01-2014,但是当我试图对它们排序时,它仍然只将它们视为数字字符串,所以01-01-1990会在02-01-2014之前。

关于如何在过滤器中做到这一点有什么建议吗?

谢谢!

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

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

因为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函数返回的对象进行排序。

EDIT: solution for :reverse

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

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

var now = Date.now();现在= $过滤器(日期)(现在的yyyy-MM-ddThh: mm: ss + hh: mm");

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