Angular 6-比较日期字符串和数组过滤器上的日期

时间:2018-08-27 22:48:02

标签: angular typescript

我需要知道日期是否等于或小于今天。

  let currentTimeInSeconds = new Date().getTime() / 1000;
  currentTimeInSeconds = currentTimeInSeconds.toString().substring(0, currentTimeInSeconds.toString().indexOf('.'));
  this.UnpaidDuebills = this.UnpaidDuebills.filter(bills => bills.expirationDate <= currentTimeInSeconds);

bills.expirationDate以字符串格式返回日期,例如22/01/2018

我不知道如何在几秒钟内在该数组过滤器中转换该字符串格式。

3 个答案:

答案 0 :(得分:0)

您可以使用称为 UTC()的日期对象方法。 More details about the function

基本上,您只需要执行以下操作即可:

Date.UTC(year, month, day)

鉴于此,您的变量为bills.expirationDate,格式为dd / mm / yyyy,您需要将其拆分。

您可以这样做:

this.UnpaidDuebills = this.UnpaidDuebills.filter(bills => Date.UTC(bills.expirationDate.split("/")[2], bills.expirationDate.split("/")[1], bills.expirationDate.split("/")[0]) <= currentTimeInSeconds);

答案 1 :(得分:0)

首先,您应该首先从expirationDate字符串中获取年,月,日。 而且,您可以基于expirationDate使用创建日期类型。

并使用getTime()转移到Number(毫秒)。然后比较过滤器。

定义getNewDate函数

function getNewDate(expirationDate){
    const year = getYear(expirationDate);
    const month = getMonth(expirationDate);
    const day = getDay(expirationDate);
    return newExpirationDate = new Date(year, month, day)
}

并使用该功能进行过滤

this.UnpaidDuebills = this.UnpaidDuebills.filter(bills => getNewDate(bills.expirationDate).getTIme() <= currentTimeInSeconds);

答案 2 :(得分:0)

要执行此过滤器,您需要设置日期限制,该日期必须是午夜,或者只是要确保午夜前一秒的expirationDate。

let currentTimeInSeconds = new Date().getTime() / 1000;
currentTimeInSeconds = currentTimeInSeconds.toString().substring(0, currentTimeInSeconds.toString().indexOf('.'));
this.UnpaidDuebills = this.UnpaidDuebills.filter(bills => {
moment(bills.expirationDate + ' 23:59:59','DD/MM/YYYY hh:mm:ss').valueOf() <= currentTimeInSeconds});

我喜欢使用moment.js来解析日期,但是由您自己决定,您只需要设置一整个小时的时间并进行精确的比较即可。

干杯!