2013-02-21 106 views
8

我有一個返回JSON像這樣一個服務:angularjs日期過濾器沒有格式化的json值

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

當我嘗試使用綁定,它不工作的格式 - 它只是顯示上面的字符串:

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

什麼是解決這個問題的最好辦法:

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

不過,如果我只是通過這種格式它的工作原理?

+1

文檔定義的日期格式,從服務器傳遞一個有效的格式或創建它分析你的數據,自定義過濾器有效日期http://docs.angularjs.org/api/ng.filter:date – charlietfl 2013-02-21 00:17:56

回答

12

正如charlietfl在評論中提到的,乾淨的選項是更新服務以返回已經與內置角度過濾器兼容的日期格式。

但是,如果這是不可能的,你可以設置一個自定義過濾器來解析你的日期。

A(非常小的),我建議庫Moment.js: http://momentjs.com/

以下是如何在自定義的角度過濾套Moment.js一個例子博客文章: 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() 
     }; 
    }); 

這將用於像:

{{ reply.createdDate | fromNow }} 
9

您可以在controlle把這個R:

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

然後:

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

簡單,不需要任何其他庫。謝謝! – 2014-06-02 11:38:14

0

我第二@ AlexOsborn的建議,使用moment.js創建自定義過濾器,因爲moment.js可以解析包含日期的字符串。我在執行過濾器的,我也委託日期格式,以moment.js因爲我覺得moment.js'日期格式的特點是more comprehensive比angular.js':

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; 
}]); 

你使用它,就像你會使用angular.js日期過濾器(但格式化日期,你會使用moment.js格式化代碼):

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