Angular.js格式来自json对象

时间:2014-03-16 09:32:31

标签: javascript json angularjs date format

我的json回复看起来像这样:

[{"Id":"dab4580b-e24d-49f8-9fd5-2e968b10d3b5","Title":"MVVM-Sidekick 入精","CreatedOn":"\/Date(1390272893353)\/","IsChecked":false},{"Id":"66a0f134-e240-4cc4-96fa-ac3807853ca7","Title":"Windows Phone 开发入精","CreatedOn":"\/Date(1390018447080)\/","IsChecked":false}]

" CreatedOn"日期是这种格式:' /日期(1390272893353)/'

当我将此结果绑定到html表时,日期无法格式化:

<td>{{item.CreatedOn | date: 'yyyy-MM-dd HH:mm'}}</td>

仍然给了我:

/日期(1390272893353)/

我不想更改服务器端的任何代码(不要修改json字符串),格式化这个日期的最佳方式是什么?

6 个答案:

答案 0 :(得分:29)

我实际上将@Charminbear和@Nikos的答案结合在这个过滤器中,这个过滤器非常好用,并且在没有正则表达式的情况下非常清楚:

myApp.filter("jsDate", function () {
    return function (x) {
        return new Date(parseInt(x.substr(6)));
    };
});

这使得写入

成为可能
{{ $scope.item.CreatedOn | jsDate | date:"yyyy-MM-dd" }}

答案 1 :(得分:22)

一种选择是编写另一个过滤器并将其放入链中。 E.g:

app.filter("mydate", function() {
    var re = /\/Date\(([0-9]*)\)\//;
    return function(x) {
        var m = x.match(re);
        if( m ) return new Date(parseInt(m[1]));
        else return null;
    };
});

基本上它使用正则表达式来解析字符串并生成Date(如果格式与显示的格式不同,则必须调整正则表达式。)

将其用作:

<td>{{item.CreatedOn | mydate | date: 'yyyy-MM-dd HH:mm'}}</td>

答案 2 :(得分:6)

我知道我迟到了。但我想告诉我有什么帮助: -

<td>{{item.yourdatefield.slice(6,-2) | date:'dd-MMM-yyyy' }}</td>

希望它能帮助像我这样懒惰的程序员。 :)

答案 3 :(得分:4)

Angular Date-Filter需要一个JS-Date。因此,您需要先解析JSON日期,然后再将其提供给过滤器。

试试这个:

<td>{{item.CreatedOnParsed | date: 'yyyy-MM-dd HH:mm'}}</td>

在回复的回调方法中,执行以下操作:

$scope.item.CreatedOnParsed =  new Date(parseInt(item.CreatedOn.substr(6)));

显示在此Answer

修改 正如你的帖子的评论所看到的那样,即使只是时间戳对于Date-Filter来说已经足够了,所以即使这样就足够了:

$scope.item.CreatedOnParsed =  item.CreatedOn.substr(6);

答案 4 :(得分:2)

//input - "DocDate":"\/Date(1127318400000-0000)\/"
-------

<tr dir-paginate="user in SalesOrder>
    <td>{{user.DocDate | jsonDate}}</td>
</tr>

controller
----------
app.filter('jsonDate', ['$filter', function ($filter) {
    return function (input, format) {
        return (input) 
               ? $filter('date')(parseInt(input.substr(6)), format) 
               : '';
    };
 }]);

答案 5 :(得分:0)

假设这是一个.net JSON日期,你使用的是moment.js。然后将其功能(defined here)用于过滤器

 myApp.filter('JSONdate', [
       '$filter', function ($filter) {
           return function (input, appformat) {
               if (input != null) {
                   return moment(input).format(appformat);
                   // use the line below if you want to leverage the standard date filter on top of this 
                   // return $filter('date')(new Date(moment(input)), appformat);
               } else {
                   return '';
               }
           };
       }])