2013-05-05 19 views
13

Jestem nowicjuszem w Firebase i zastanawiałem się, jak mogę zapisać datę JavaScript i użyć Firebase do późniejszego porównania ich po stronie klienta?Firebase new Date()?

chcę zrobić coś takiego:

var someDate = new Date(); 
myRootRef.set(someDate); 

myRootRef.on('value', function(snapshot) { 
    var currDate = new Date(); 
if (currDate >= snapshot.val()){ 
    //do something 
} 

Jednak wrócę wartość null z migawka?

Odpowiedz

17

Można również użyć znacznika czasu.

var timestamp = new Date().getTime(); 
myRootRef.set(timestamp); 

myRootRef.on('value', function(snapshot) { 
    var currDate = new Date(); 
    var snapshotTimestamp = snapshot.val(); 

    //you can operate on timestamps only... 
    console.log("Snapshot timestamp: " + snapshotTimestamp); 

    if(currDate.getTime() >= snapshotTimestamp) { 
     //do something 
    } 

    //...or easily create date object with it 
    console.log("Snapshot full date: " + new Date(snapshotTimestamp)); 

    if (currDate >= new Date(snapshotTimestamp)){ 
     //do something 
    } 

}); 
+3

Dodatkowo, jeśli obie daty pochodzą od tego samego klienta, prawdopodobnie będziesz chciał skonsultować '.info/serverTimeOffset' i dodać to do znacznika czasu:' new Date(). GetTime() + offset'; w przeciwnym razie dostaniesz dziwności dla użytkowników, którzy nie synchronizują swojego zegara w ciągu sekundy czasu atomowego – Kato

+0

dzięki za odpowiedzi i próbki kodu! Bardzo to doceniam! – TriFu

-3

Musisz ustawić Bazę Firebazy za pomocą łańcucha lub obiektu o wartości i odczytywać tę samą wartość w wydarzeniu.

var someDate = new Date(); 
    myRootRef.set({Date: someDate.toString()}); 

    myRootRef.on('value', function(snapshot) { 
    var msg = snapshot.val(); 
    var currDate = new Date(); 
    if (currDate >= msg.Date){ 
    //do something 
    } 
    }); 
+0

Porównywanie dat jako ciągów nie zapewni poprawnego porównania dat, więc prawdopodobnie będziesz chciał skorzystać z metody sygnatury czasowej zalecanej przez @ghost. –