2013-02-21 12 views
8

Mam usługa, która zwraca json tak:angularjs data filtr nie formatowanie moją wartość json

"Results":[{"Id":"1","SomeDate":"2/19/2013 10:34:04 PM"} 

Kiedy próbuję sformatować za pomocą wiązania, nie robi praca - po prostu wyświetla ciąg powyżej:

{{values.SomeDate| date:'mediumTime' }} 

jednak to działa, jeśli tylko przechodzą w tym formacie:

{{ '1997-03-01T00:00:00+01:00' | date:'mediumTime'}} 

Jaki jest najlepszy sposób, aby rozwiązać ten problem?

+1

docs określić formaty daty, przekazać poprawny format z serwera lub utworzyć własny filtr, który analizuje dane do poprawna data http://docs.angularjs.org/api/ng.filter:date – charlietfl

Odpowiedz

12

Jak wspomniano w komentarzach charlietfl, czystą opcją byłoby zaktualizowanie usługi, aby przywrócić format daty zgodny z wbudowanymi filtrami kątowymi.

Jeśli jednak nie jest to możliwe, można skonfigurować niestandardowy filtr, aby przeanalizować daty.

A (bardzo mały) biblioteki, które polecam jest Moment.js: http://momentjs.com/

Poniżej znajduje się przykład blogu o tym, jak owinąć Moment.js w zwyczaju kątowej Filtr: http://www.34m0.com/2012/07/angularjs-user-friendly-date-display.html

angular.module('myModule'). 
    filter('fromNow', function() { 
     return function(dateString) { 
      return moment(new Date(dateString)).fromNow() 
     }; 
    }); 

to będzie używany jak:

{{ reply.createdDate | fromNow }} 
9

Możesz umieścić to w swoim controlle R:

$scope.toJsDate = function(str){ 
    if(!str)return null; 
    return new Date(str); 
    } 

a następnie:

{{toJsDate(values.SomeDate)| date:'mediumTime' }} 
+0

łatwa, nie potrzeba żadnych innych bibliotek. dzięki! –

0

Chciałbym sekund @ sugestią AlexOsborn do wykorzystania moment.js utworzyć filtr niestandardowy ponieważ moment.js można analizować ciąg zawierający datę. W moim implementacji filtra, ja również delegować formatowanie dat, aby moment.js bo czuję moment.js' funkcja formatowania data jest more comprehensive niż angularjs:

angular 
.module("YourModuleNameHere") 
.filter("formatdate", [function() { 
    var result = function (date, formatstring) { 
     if(formatstring === null) { 
      formatstring = "DD MMM YYYY"; 
     } 
     return moment(date).format(formatstring); 
    } 
    return result; 
}]); 

i używasz go tak jak chcesz używać angularjs filtr data (ale sformatować datę byłoby użyć moment.js kody formatowania):

<p>Today is {{moment() | formatdate}}</p> 
<p>Another date: {{values.SomeDate | formatdate:"ddd D MMM YYYY"}}</p>