Angular 2-比较数组过滤器中的日期

时间:2018-09-03 19:51:17

标签: javascript angular typescript

这将使我获得当前时间(以秒为单位):

let currentTimeInSeconds = new Date().getTime() / 1000;

我有一个对象为expirationDate的数组,它以秒为单位返回该信息。我可以获得过期的账单,但是,我想过滤出今天过期的账单。

this.ExpiringTodayBills = this.UnpaidDuebills.filter(bills => bills.paid === false && bills.expirationDate = currentTimeInSeconds);

上面的代码不起作用,因为当前时间由于小时,分钟,秒和毫秒而不断变化。

如果expirationDate =今天,无论时间如何,我将如何比较?

修改:这是帐单示例

名称:测试帐单

已支付:错误

有效期:1535598000(表示2018年8月30日3:00:00)

金额: 231.33

2 个答案:

答案 0 :(得分:2)

怎么样?

isExpiringToday(expirationDate) {
  const start = new Date();
  start.setHours(0, 0, 0, 0);

  const end = new Date();
  end.setHours(23, 59, 59, 999);

  const expiryDateTimeStamp = expirationDate * 1000;

  return (expiryDateTimeStamp > start && expiryDateTimeStamp < end);
}

this.ExpiringTodayBills = this.UnpaidDuebills
  .filter(bills => !bills.paid && this.isExpiringToday(bills.expirationDate));

您可以通过打开浏览器开发工具,转到控制台并执行以下操作来对此进行测试:

function isToday(expiryDateTimeStamp) {
    const start = new Date();
    start.setHours(0, 0, 0, 0);

    const end = new Date();
    end.setHours(23, 59, 59, 999);

    return (expiryDateTimeStamp > start && expiryDateTimeStamp < end);
}

var newDate = new Date();
isToday(newDate.getTime())  // true

答案 1 :(得分:0)

您应该遍历数据,并将expirationDatecurrentTimeInSeconds转换为date。库moment.js可能会有所帮助。 接下来,您可以执行以下操作:

this.ExpiringTodayBills = this.UnpaidDuebills.filter(bills => bills.paid === false && bills.expirationDate = today);

const today = moment().format('MM/DD/YYYY');
console.log(today);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.min.js"></script>