2016-11-20 5 views
0

Ich versuche, Daten aus der Datenbank (Firebase) mit NOW zu vergleichen. Ich benutze moment.js und es funktioniert nicht. Ich denke, es hat etwas mit der Zeitzone zu tun (oder UTC + 01: 00) ...So vergleichen Sie Daten mit Moment

Beispiel.

  • date1: "2016-11-20T14: 00: 00"
  • NOW: "2016-11-20T14: 49: 20 + 01: 00"

ich JETZT bekommen mit moment() und vergleichen Sie wie folgt aus:

var date1 = moment("2016-11-20T14:00:00"); 
moment(date1).isSameOrAfter(moment()) // returns true 

Der Vergleich ist genau 1 Stunde weg ... Wie kann ich dieses Problem beheben? UND: Gibt es Best Practices beim Speichern und Vergleichen von Daten in verschiedenen Zeitzonen?

+0

zeigen Sie das Ergebnis von 'Moment ("2016-11-20T16: 00: 00") Format()'.. Ich würde vermuten, dass die Zeitzone Ihres PCs nicht "+01: 00" ist. –

+0

"2016-11-20T14: 00: 00" Offset basierend auf der Host-Zeitzone analysiert werden. Sie sollten das Zeichenfolgenformat immer an den Parser übergeben, andernfalls wird nur geraten. – RobG

Antwort

1

Daten sollten immer in UTC gespeichert werden. Wenn Sie string verwenden, geben Sie den UTC-Datumswert im ISO-Format ein.

So während des Konvertierens von Client-Zeitzone in UTC und beim Abrufen von UTC in Client-Zeitzone konvertieren.

Der Vergleich sollte zwischen zwei Daten in derselben Zeitzone durchgeführt werden.

Wenn der Datenbankwert in UTC ist und Sie dann beim Erstellen eines Momentobjekts als .utc() analysieren müssen.

moment.utc("2016-11-20T14:00:00"); 

Ändern Sie den NOW-Wert vor dem Vergleich in UTC.

moment.(date1).utc() 

Alternativ können Sie den Datenbankwert von UTC zu lokal ändern.

moment.utc("2016-11-20T14:00:00").local() 

Behalten Sie den NOW-Wert wie vor dem Vergleich bei.

+0

Es funktioniert, wenn das Datum von Firebase in lokale Zeit umgerechnet wird: moment.utc ("2016-11-20T14: 00: 00"). Local(). – olefrank

1

Sie können das Datum, das Sie in Firebase gespeichert haben, nicht mit now vergleichen(), da die Informationen zu Ihrer Zeitzone fehlen.

können Sie Termine speichern Firebase.ServerValue.TIMESTAMP

zum Beispiel mit:

date1: Firebase.ServerValue.TIMESTAMP

Dies wird Ihre Zeit in Unix Millisekunden (Zeit seit der Epoche Unix, in Millisekunden) sparen durch die Firebase Datenbank-Server.

Dann können Sie mit new Date().getTime() vergleichen dies wird Ihr Gerät Zeit in Unix Millisekunden geben.

Beispiel:

if(new Date().getTime() >= date1) { 
    //do something 
} 

Hoffe, es hilft :)

Verwandte Themen