Angular JS:如何使用过滤器显示日期是今天还是昨天

时间:2017-04-17 11:38:57

标签: angularjs

我有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过滤器,但我没有获得所需的格式。

我想我必须为此编写自定义过滤器。你能帮忙吗?

1 个答案:

答案 0 :(得分:3)

您可以创建自定义过滤器并重复使用日期过滤器。过滤器只是一个接受输入并提供输出的函数:

您正在寻找的是:

  • 采用日期的人
  • 如果日期是"今天的日期",请返回"今天H:mma"
  • 如果日期是"昨天的日期",则返回"昨天H:mma"
  • 否则返回" EEEE H:mma"

您可以使用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>

这是一个有效的代码:https://codepen.io/anon/pen/Qvbogd?editors=1010