查询没有return当月的日期和第一天

Query does not return when the date and first day of the month

我正在执行一个查询,该查询应该 return 月初和月底之间的值。当在每月的第一天输入记录时,记录不会 returned ...只有当月第一天之后的记录才会被 returned。

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

我已经尝试通过调用 getTime() 方法来执行查询,但是 return 没有记录。

银行记录日期如下:

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

如果我更改时间,记录将return与其他记录一起编辑。

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

我正在使用 mat-datepicker of Angular Material 保存日期,但此组件不保存时间,只保存日期。

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

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

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 });
}

变化:

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))