reactjs - 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 天......
也许缺少了什么?
解决方案
正如@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>
推荐阅读
- powershell - 指定的路径、文件名或两者都太长 Powershell
- javascript - 多个意图的线性流不起作用
- mysql - MYSQL-我想在mysql数据库中添加一个名为“total_marks”的列
- javascript - 如何在javascript循环中交替定位前两个或三个元素
- c - 将 unsigned int 左移到 32 位,生成警告
- python - 如何使用 JQuery 和 Django 上传图像
- javascript - 在 JavaScript 中传递冻结对象
- regex - 需要 Spring 控制器 GetMapping 的正则表达式,其路径变量排除具有特定前缀的 URL
- java - 所有时间戳日期减少 2 小时,Java 1.7 和 MS SQL Server
- java - 无法使用 mapper.readValue 将有效的 UUID 字符串转换为 UUID