0

AngularFire2 und FirestorAngularFire2 Firestor Dynamische Abfrage: Wo Startzeit == currentDateRange

Ziel: Abfrage von Daten aus Firestor, wo Startzeit == currentDateRange

Frage: mit der Dynamic-Abfrage in Firestor Troubled. Ich lese durch die documentation und schaute auf die example geliefert. Ich habe wöchentliche Lektionen in meinem Firestore, d. H. (Lektion 1, Lektion 2, Lektion 3, usw.). Sie haben jeweils eine StarTime (Zeitstempel) (18. Dezember 2017, 25. Dezember 2017, 1. Januar 2018).

Mein Ziel ist es, dass meine Webseite nur das aktuelle Unterrichtsmaterial für die angegebene Woche für meine Schüler anzeigt. Die wöchentliche Lektion würde am Montag um 00:00 Uhr (Mitternacht Sonntag) bis Sonntag 23:59 Uhr, Sieben Tage Datumsbereich angezeigt werden.

Dann, wenn die neue Woche wieder am Montag begann, würde ich die neue Lektion angezeigt haben, in dem Beispiel hier, Lektion 2 - 25. Dezember 2017. Stated mit, wie das aktuelle Datum zu identifizieren, dann den Zeitraum hinzufügen, oder aktueller Tag plus sechs weitere Tage.

Von MySql zu Firestore übergehen. Also immer noch sehr fremd für mich. Unten ist die Arbeit aufgeführt, die ich bisher gemacht habe (mit sehr wenig Erfolg). Abbildung der Firestore-Datenstruktur, der TypeScript-Datei und des HTML-Codes.

Zum ersten Mal auf StackOverflow, hoffentlich habe ich die richtigen Richtlinien zum Einreichen dieser Frage befolgt. Vielen Dank für Ihre Hilfe.

Firestor Daten

Firestore Data Structure

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> 

Antwort

0

Der einfachste Weg ist:

endDate = startDate + 7*86400 // 7 days * 86400 ms in a day 

Das Problem mit gerade hinzufügen Daten ist es nicht für Schalttag Konto hat usw.

Die beste Art und Weise Daten zu manipulieren, in Javascript mit der moment.js Bibliothek ist. Im Folgenden finden Sie ein Beispiel, wie Sie Ihre Daten validieren können (falls erforderlich) und dann 1 Woche hinzufügen, um das Enddatum zu erhalten.

if (!moment(this.activity.dates.startDate).isValid()) 
     this.activity.dates.startDate = moment().toISOString(); 
    if (!moment(this.activity.dates.endDate).isValid()) 
     this.activity.dates.endDate = moment().add(1, 'week').toISOString(); 
Verwandte Themen