首页 > 解决方案 > 查询不返回当月的日期和第一天

问题描述

我正在做一个查询,它应该返回月初和月底之间的值。在当月的第一天输入记录时,不返回记录...仅返回当月第一天之后的记录。

Cloud Firestore数据库中,我发送了一个类型的对象,Date()但是当保存被转换Timestamp为时,记录的返回是类型Timestamp而不是Date().

我已经尝试通过调用该getTime()方法来执行查询,但没有返回任何记录。

在银行记录的日期如下:

February 1, 2019 00:00:00 UTC-3

如果我更改记录与其他人一起返回的时间。

February 1, 2019 01:00:00 UTC-3

我正在使用Angular Material的mat-datepicker来保存日期,并且该组件不会仅与日期一起保存时间。

我已经尝试在每次输入记录时将分钟设置为日期,但是当我这样做时,不会返回该月的最后一天记录。

下面是我如何执行查询的代码:

selectedMonth$: BehaviorSubject<{ startOf: Date, endOf: Date }>;
startOfMonth = moment(new Date()).startOf('month').toDate();
endOfMonth = moment(new Date()).endOf('month').toDate();

    this.selectedMonth$ = new BehaviorSubject({
        startOf: this.startOfMonth,
        endOf: this.endOfMonth
    });

    this.transactions$ = this.selectedMonth$.pipe(
        switchMap(dateSelected => this._angularFirestore.collection(collectionRef, ref =>
            ref.where('dueDate', '>', dateSelected.startOf)
                .where('dueDate', '<', dateSelected.endOf))
            .snapshotChanges()
            .pipe(
                map(actions => {
                    return actions.map(a => {
                        const data = a.payload.doc.data() as any;
                        data.id = a.payload.doc.id;
                        return data;
                    });
                })
            )));

updateSelectedMonth(date: Date): void {
    this.startOfMonth = moment(date).startOf('month').toDate();
    this.endOfMonth = moment(date).endOf('month').toDate();
    this.selectedMonth$.next({ startOf: this.startOfMonth, endOf: this.endOfMonth });
}

标签: angulartypescriptgoogle-cloud-firestoreangularfire2

解决方案


改变:

ref.where('dueDate', '>', dateSelected.startOf)
   .where('dueDate', '<', dateSelected.endOf))

至:

ref.where('dueDate', '>=', dateSelected.startOf)
   .where('dueDate', '<=', dateSelected.endOf))

然后确实确保dateSelected.endOf包括该日期的最新可能时刻(23:59:59),或者实际上只是将其设置为第二天,0:00并且:

ref.where('dueDate', '>=', dateSelected.startOf)
   .where('dueDate', '<', dateSelected.endOf))

推荐阅读