我有JSON,他们以毫秒为单位提供了日期(交易日期)的交易详情。请参考下面的JSON:
[
{
"id": "contentAttributes/title",
"date": 1490169040579,
"price": "2,99",
"transactionStatus": "COMPLETED",
"contentName": "GooglePlay Movies, Big Bang Theory",
"merchantName": "abc",
"emailId": "abc",
"opco": "en_GB"
},
{
"id": "contentAttributes/title",
"date": 1490169040580,
"price": "4,99",
"transactionStatus": "PENDING",
"contentName": "GoolePlay Store, Snapseed",
"emailId": "abc",
"opco": "en_GB"
},
]
我必须向用户显示交易日期,如下所示:
如果交易已完成今天
Transaction Name: ABC purchased
Transaction Date: Today, 11:15AM
如果交易已于昨天完成
Transaction Name: ABC purchased
Transaction Date: Yesterday, 03:15PM
如果交易在昨天前一天完成
Transaction Name: ABC purchased
Transaction Date: Name of day[Sunday], 11:15AM
我应该使用哪种过滤器以上述格式显示日期?我尝试使用Angular过滤器,但我没有获得所需的格式。
我想我必须为此编写自定义过滤器。你能帮忙吗?
答案 0 :(得分:3)
您可以创建自定义过滤器并重复使用日期过滤器。过滤器只是一个接受输入并提供输出的函数:
您正在寻找的是:
您可以使用Date的方法,例如getFullYear,getMonth和getDate,以便比较具体日期在哪种情况。
这是一个粗略的例子
app.filter('formatdate', function($filter) {
return function(timestamp) {
var currentDate = new Date()
var toFormat = new Date(timestamp)
if(toFormat.getDate() == currentDate.getDate() && toFormat.getMonth() == currentDate.getMonth() && toFormat.getFullYear() == currentDate.getFullYear() ) {
return 'Today ' + $filter('date')(toFormat.getTime(), 'H:mma')
}
if(toFormat.getDate() == (currentDate.getDate() - 1) && toFormat.getMonth() == currentDate.getMonth() && toFormat.getFullYear() == currentDate.getFullYear()) {
return 'Yesterday ' + $filter('date')(toFormat.getTime(), 'H:mma')
}
return $filter('date')(toFormat.getTime(), 'EEEE H:mma')
}
})
你可以像这样使用它:
<div ng-repeat="purchase in data">
{{purchase.date | formatdate}}
</div>