查询没有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))
我正在执行一个查询,该查询应该 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))