【发布时间】:2023-04-01 19:16:01
【问题描述】:
AngularFire2 和 Firestore
目标:从 Firestore 中查询 startTime == currentDateRange 的数据
问题:Firestore 中的动态查询遇到问题。我通读了documentation 并查看了提供的example。我的 Firestore 中存储了每周课程,即(第 1 课、第 2 课、第 3 课等)。它们每个都有一个 starTime(timestamp)(2017 年 12 月 18 日、2017 年 12 月 25 日、2018 年 1 月 1 日)。
我的目标是让我的网页只为我的学生显示给定一周的当前课程材料。每周课程将在周一 00:00(周日午夜)至周日 23:59(七天日期范围)显示。
然后,当新的一周在星期一重新开始时,我会显示新课程,在此处的示例中,第 2 课 - 2017 年 12 月 25 日。不知道如何识别当前日期,然后添加日期范围,或者当天加上另外六天。
从 MySql 转移到 Firestore。所以对我来说还是很陌生。下面提供的是我迄今为止所做的工作(收效甚微)。 Firestore 数据结构、TypeScript 文件和 HTML 的图像。
第一次在 StackOverflow 上发帖,希望我遵循了正确的准则来提交这个问题。非常感谢您提供的任何帮助。
Firestore 数据
TS
import { Component } from '@angular/core';
import { AngularFirestore, AngularFirestoreDocument, AngularFirestoreCollection } from 'angularfire2/firestore';
import { Observable } from 'rxjs/Observable';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
import 'rxjs/add/operator/switchmap'
import 'rxjs/add/observable/combineLatest';
export interface Week {
lesson: string;
startTime: Date;
}
@Component({
selector: 'app-calendar',
templateUrl: './calendar.component.html',
styleUrls: ['./calendar.component.css'],
})
export class CalendarComponent {
weeks: Observable<any[]>;
dateFilter: BehaviorSubject<string | null>;
currentDate: new Date();
endDate: string;// need to figure out how to add seven days from currentDate
constructor(private afs: AngularFirestore) {
this.dateFilter = new BehaviorSubject(null);
this.weeks = Observable.combineLatest(
this.dateFilter).switchMap(([startTime]) => afs.collection<Week>('weeks', ref => {
let query : firebase.firestore.CollectionReference | firebase.firestore.Query = ref;
if (startTime) { query = query.where('startTime', '=>', currentDate) };
if (startTime) { query = query.where('startTime', '<', endDate) };
return query;
}).valueChanges());
}
HTML
<ul *ngFor="let week of weeks | async">
<li >
{{ week.lesson }}
</li>
<li>
{{ week.startTime }}
</li>
</ul>
【问题讨论】:
标签: typescript timestamp angularfire2 google-cloud-firestore