cloak array angularjs angularjs-ng-repeat angularjs-filter

angularjs - array - ng-init



Angular JS filtro de fecha no funciona (5)

Tengo un elemento ng-repeat que recorrerá el resultado de $http.get() .

<tr ng-repeat="blog in posts"> <td style="text-align:center">{{ $index+1 }}</td> <td>{{ blog.title }}</td> <td> {{ blog.author.name }} </td> <td> {{ blog.created_at | date:''MMM-dd-yyyy'' }} </td> </tr>

He created_at como timestamp de timestamp en la tabla de base de datos MySQL. Y estoy usando angular.js v1.0.7 .

Obtengo la misma salida de la tabla db y el filtro de fecha no funciona. ¿Como puedo resolver esto?

Mi llamada ajax,

$http({method: ''GET'', url: ''http://localhost/app/blogs''}). success(function(data, status, headers, config) { $scope.posts = data.posts; }). error(function(data, status, headers, config) { $scope.posts = []; });


Cuando la variable de fecha de registro recuerde usar la palabra clave "nueva" como se muestra a continuación

var time = new Date();

De lo contrario si escribes así:

var time = Date();

La fecha se llama como una función y se devolverá una cadena de fecha y hora que no se puede utilizar como entrada para el filtro.


Desde el lado del servidor, devuelve el created_at como cadena desde el elocuente de laravel.

Esto se puede resolver utilizando este javascript,

new Date("date string here".replace(/-/g,"/"));

Así que el código,

$http({method: ''GET'', url: ''http://localhost/app/blogs''}). success(function(data, status, headers, config) { angular.forEach(data.posts, function(value, key){ data.posts[key].created_at = new Date(data.posts[key].created_at.replace(/-/g,"/")); } $scope.posts = data.posts; }). error(function(data, status, headers, config) { $scope.posts = []; });


La fecha pasada al filtro debe ser de tipo javascript Fecha .

¿Has comprobado cuál es el valor blog.created_at se muestra sin el filtro?

Usted dijo que su servicio respaldado está devolviendo una cadena que representa la fecha. Puedes resolver esto de dos maneras:

  1. Haga que su código del lado del servidor devuelva un objeto de fecha json
    • verifique cómo el código del lado del servidor serializa el json que devuelve
  2. Escriba su propio filtro que acepte la fecha de la cadena y la fecha de devolución en el formato requerido
    • Nota : puedes llamar al filtro angular en tu propio filtro.

Puedes escribir tu propio filtro de la siguiente manera:

app.filter(''myDateFormat'', function myDateFormat($filter){ return function(text){ var tempdate= new Date(text.replace(/-/g,"/")); return $filter(''date'')(tempdate, "MMM-dd-yyyy"); } });

Y úsalo así en tu plantilla:

<td> {{ blog.created_at | myDateFormat }} </td>

En lugar de recorrer la matriz devuelta y luego aplicar el filtro


Puede crear una new Date(/*...*/) basada en datos obtenidos de $http.get , como:

$scope.date = new Date(''2013'', ''10'', ''28''); // for example

De todas formas puedes ver esta Demo en Plunker .

Espero que te ayude


puede agregar un filtro personalizado que convierta la cadena a la fecha, como el siguiente código:

app.filter(''stringToDate'',function ($filter){ return function (ele,dateFormat){ return $filter(''date'')(new Date(ele),dateFormat); } })

luego use este filtro en cualquier plantilla como el siguiente código:

<div ng-repeat = "a in data">{{a.created_at |stringToDate:"medium"}}</div>