我从Firebase获得了Observable。
如何使用开始日期和结束日期过滤来自Observable的数据?
我只需要获取句点的数据,所以我需要在Observable中创建一个过滤器,只返回通知期间的数据。
在我的Observable中,对于每个给定的数据,我都有date_anniversary,我需要根据返回的date_anniversary返回start_date和end_data之间的所有数据。
如何过滤和更新Observable以仅在start_date和end_date之间显示数据?
答案 0 :(得分:0)
以下是来自www.learnrxjs.io的数字大于指定值的过滤的example :
import { interval } from 'rxjs/observable/interval';
import { filter } from 'rxjs/operators';
//emit every second
const source = interval(1000);
//filter out all values until interval is greater than 5
const example = source.pipe(filter(num => num > 5));
/*
"Number greater than 5: 6"
"Number greater than 5: 7"
"Number greater than 5: 8"
"Number greater than 5: 9"
*/
const subscribe = example.subscribe(val =>
console.log(`Number greater than 5: ${val}`)
);
因此,在您的情况下,只过滤给定日期范围的结果:
source.pipe(filter(item => item.date_anniversary >= start_date && item.date_anniversary <= end_date));
我假设日期是时间戳整数格式,如果它是JS Date
格式,您可以使用其getTime()
方法。
如果您加载了moment JS
库,则可以使用其isBetween()
method
版本2.13.0引入了包容性。 A [表示包含值。
要使moment.isBetween
包含在内,请传递第四个参数:
时刻('2016-10-30')。isBetween('2016-10-30','2016-12-30',null,'()'); //假 时刻('2016-10-30')。isBetween('2016-10-30','2016-12-30',null,'[)'); //真正 时刻('2016-10-30')。isBetween('2016-01-01','2016-10-30',null,'()'); //假 时刻('2016-10-30')。isBetween('2016-01-01','2016-10-30',null,'(]'); // true 时刻('2016-10-30')。isBetween('2016-10-30','2016-10-30',null,'[]'); // TRUE`