首页 > 解决方案 > rxjs momentjs 过滤过去 30 天

问题描述

我有一个使用以下模型的对象数组:

导出接口数据 { id: number qt: number date: string }

我使用秋田的商店,我想过滤我的对象表,以便我只有最近 30 天的结果。

    qtLastMonth(): Observable<Data[]> {
    return this.selectAll().pipe(
        map((allDatas) => allDatas.filter(data => 
            moment(data.date).format('DD-MM-YYYY') > 
            moment().subtract(30, "days").format('DD-MM-YYYY'))
        ))
}

但是,我得到一个对象表的输出,其日期晚于过去 30 天......

也许缺少了什么?

标签: reactjsrxjsmomentjsakita

解决方案


正如@Anthony 建议的那样,您必须删除format它,因为它会比较字符串。没有它,谓词将根据obj.valueOf()Unix Timestamp值进行评估。

const { of , operators: {
    map
  }
} = rxjs;


const selectAll = () => of (Array(10).fill(0).map((pr, index) => ({
  date: moment().subtract(25 + index, 'days').toDate()
})))

selectAll().pipe(
    map((allDatas) => {
      const monthAgo = moment().subtract(30, "days");
      return allDatas.filter(({
        date
      }) => moment(date) > monthAgo)
      // }) => moment(date).valueOf() > monthAgo.valueOf()) // equivalent
    }))
  .subscribe(result => {
    console.log(result)
  })
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.5/rxjs.umd.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.26.0/moment.min.js"></script>


推荐阅读