angular - 查询不返回当月的日期和第一天
问题描述
我正在做一个查询,它应该返回月初和月底之间的值。在当月的第一天输入记录时,不返回记录...仅返回当月第一天之后的记录。
在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 });
}
解决方案
改变:
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))
推荐阅读
- android - 在 viewpager 片段内的 recyclerview 项目与 viewpager 片段之间共享元素转换
- akka.net - 测试 Akka.net 的一些问题
- c - Xcode 9.4.1 在 C 文件末尾添加了一个空行,导致编译器咨询
- asp.net-mvc - 如果在剑道窗口打开时用户未通过身份验证,如何重定向登录页面
- google-apps-script - 将值复制并粘贴到 Google 表格中的下一个空行中
- javascript - 在javascript中查找对象中键值对的频率
- java - findViewById() 下仅显示一个 ImageButton
- docker - kubectl apply -f 在代理后面
- asp.net-core-2.0 - ASP.NET Core 2.0 ==> 切换到开发环境将显示有关所发生错误的更详细信息
- java - 其他设备中的“未安装应用程序”