从日期开始日期结束之间的0bservable过滤数据

时间:2018-03-11 01:59:18

标签: angular typescript firebase filter observable

我从Firebase获得了Observable。

如何使用开始日期和结束日期过滤来自Observable的数据?

我只需要获取句点的数据,所以我需要在Observable中创建一个过滤器,只返回通知期间的数据。

在我的Observable中,对于每个给定的数据,我都有date_anniversary,我需要根据返回的date_anniversary返回start_date和end_data之间的所有数据。

如何过滤和更新Observable以仅在start_date和end_date之间显示数据?

1 个答案:

答案 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`