¿Cómo Angular orderBy con cadena de fecha? Estoy tratando de usar orderBy para ordenar una repetición ng. Nuestros datos actualmente usan valueList para el filtro que no funciona.

Creo que están ordenando alfanuméricamente en lugar de por fecha porque mi campo 'matchDate' es una cadena. Mi pregunta es, ¿cuál es la mejor manera de convertir este campo a Fecha para realizar un pedido correcto?

$scope.valueList=
[
    {
        "_id" : ObjectId("5862c276d9913952fa80aa11"),
        "matchDate" : "31 December, 2016",
        "scoreStatus" : "OPEN"
    },
    {
        "_id" : ObjectId("58679badd991390f83fbb994"),
        "matchDate" : "30 December, 2016",
        "scoreStatus" : "CLOSE"
    },
    {
        "_id" : ObjectId("58679badd991390f83fbb994"),
        "matchDate" : "28 December, 2016",
        "scoreStatus" : "OPEN"
    }
]

Este es mi html

<div ng-repeat="eachValue in valueList | orderBy: 'matchDate'">
    {{eachValue.matchDate}}
</div>
0
Aravi S 31 dic. 2016 a las 10:20
Si no entiendo mal la pregunta, ¿es esto lo que buscas? stackoverflow.com/questions/25515431 /…
 – 
Kevin Friedheim
31 dic. 2016 a las 10:25

2 respuestas

Puede ordenar por fecha como este ejemplo:

<!DOCTYPE html>
 <html lang="en-US">
   <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
   <body>
    <script type="text/javascript">
       angular.module('app',[]).controller('test',function($scope){
         $scope.valueList=[{
         "_id" : "5862c276d9913952fa80aa11",
         "matchDate" : "31 December, 2016",
         "scoreStatus" : "OPEN"
        },{
         "_id" : "58679badd991390f83fbb994",
         "matchDate" : "30 December, 2016",
         "scoreStatus" : "CLOSE"
       },{
         "_id" : "58679badd991390f83fbb994",
         "matchDate" : "28 December, 2016",
         "scoreStatus" : "OPEN"
     }]

         $scope.myValueFunction = function(date) {
            return new Date(date) 
         };
     })
    </script>
    <div ng-app="app" ng-controller="test">
      <div ng-repeat="eachValue in valueList | orderBy: myValueFunction">
        {{eachValue.matchDate}}
      </div>
     </div>
  </body>
</html>
0
kamlesh 31 dic. 2016 a las 10:41

Sugeriría usar un filtro personalizado como este:

app.filter('orderByDate', function() {
  return function(items) {
    // write your logic for order by  date
    // then return results as items    items= results;
    return items;
  };
});

Para la lógica de escritura de orderby date puede usar biblioteca moment.js

<div ng-repeat="eachValue in valueList | orderByDate>
    {{eachValue.matchDate}}
</div>

Si tienes problemas contacta

0
Niroshan Ranapathi 31 dic. 2016 a las 10:42
¿Cómo puedo convertir este formato de fecha en un momento? Por favor, ayúdame
 – 
Aravi S
31 dic. 2016 a las 13:32