angularjs日期过滤器不格式化我的json值

时间:2013-02-21 00:02:09

标签: angularjs

我有一个像这样返回json的服务:

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

当我尝试使用绑定进行格式化时,它不起作用 - 它只显示上面的字符串:

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

然而,如果我只是传递这种格式,它就有效:

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

解决此问题的最佳方法是什么?

3 个答案:

答案 0 :(得分:12)

正如charlietfl的评论中提到的,一个干净的选择是更新服务以返回已经与内置角度过滤器兼容的日期格式。

但是,如果无法做到这一点,您可以设置自定义过滤器来解析日期。

我推荐的(非常小的)库是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 }}

答案 1 :(得分:9)

您可以将其放在控制器中:

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

然后:

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

答案 2 :(得分: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>