首页 > 解决方案 > 比较和过滤对象中的日期属性

问题描述

我有一个看起来像这样的对象:

    myObject = {
      publishedDate: string;
      Url: string;
      Title: string;
  }

属性“publishedDate”是格式为“19/01/2021”的字符串。例如,它可以有一个未来的日期,即大于今天的值。换句话说,我想保留所有已发布日期等于或小于今天的对象(并删除所有已结束的对象)。对象保存在我的状态(数组)中:

this.state.data

我首先为今天的值创建一个日期变量,以将其与发布日期进行比较。我还使用 moment() 将其格式化为与对象相同的日期格式:

let today = moment().format("DD/MM/YYYY");

然后我使用过滤器方法来比较和过滤掉数据:

  this.state.data.filter(item => new Date(item.publishedDate) >= new Date(today))

我也试过:

  this.state.data.filter(function(item) {
    
      if (new Date(item.publishedDate) >= new Date(today)) {
        return false;
      }
    return true;
  });

它不仅不起作用,而且我仍然拥有数组中的所有对象,并且没有任何内容被过滤掉。代码有什么问题?

标签: javascriptarraysreactjstypescript

解决方案


您可以像这样简单地使用moment's 的内置比较器

this.state.data.filter(item => moment(item.publishedDate,'DD/MM/YYYY').isSameOrAfter(today))

推荐阅读