OrderBy Date values, which are just strings in Angular JS

非 Y 不嫁゛ 提交于 2019-12-19 06:27:25

问题


I'm trying to order some data by date, although the dates are just strings, in the format dd-mm-yyyy.

I made a filter which converted the plain string of numbers (which where in the US date format, where I wanted the UK date format) e.g 01272012 to 27-01-2014, but when I try to order them it still only sees them as numeric strings, so 01-01-1990 would come before 02-01-2014.

Any suggestions of how to do this in a filter?

Thanks!

Update

I figured out the dates would automatically get orderedif the date format was yyyy-mm-dd. I then used used orderBy:['date'] to order the data, only using my original filter when displaying the data.

I ended up having to reverse my data, showing the most recent dates. To achieve this I added a - to my orderBy statment: orderBy:['-date'].


回答1:


Because orderBy filter, you can use that. Your ng-repear would probably look similar to this:

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

and then on your controller you would define the orderByDate function:

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

    return date;
};

Implementation of the function is up to you. I choose to create Date from the string. The object you return from orderByDate function is then used to be order with using <, =, > operators.

EDIT: solution for :reverse

Since :reverse can't be used with a function passed as parameter, you can implement your custom function to return reversed value itself. In such case using Date is not possible, I would construct a number then and returned it with minus:

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

    return -number;
};



回答2:


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

Then you can data filtering with corresponding formatted date



来源:https://stackoverflow.com/questions/25306216/orderby-date-values-which-are-just-strings-in-angular-js

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!