我的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字符串),格式化这个日期的最佳方式是什么?
答案 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 '';
}
};
}])