2015-05-04 10 views
6

ich einen Bildschirm mit einem Datumsfeld haben (Startdatum), wo der BenutzerWie Sie in Firebase ein Datumsfeld speichern AngularFire mit

<label class="item item-input"> 
    <span class="input-label">Start Date</span> 
    <input type="date" ng-model="currentItem.OpenDate"> 
</label> 

ein beliebiges Datum eingeben kann ich folgendes für die Save-Taste des Click-Ereignis hinzugefügt

console.log("Normal date " + $scope.currentItem.OpenDate); 

die Konsole zeigt folgendes Datum

Normal date Fri May 01 2015 00:00:00 GMT-0400 (Eastern Daylight Time) 

Hier ist das Push-Ereignis

$scope.data.accounts.push({ 'AccountName': $scope.currentItem.AccountName, 'StartBalance': $scope.currentItem.StartBalance, 'OpenDate': $scope.currentItem.OpenDate, 'AccountType': $scope.currentItem.AccountType }); 

JEDOCH das Datum $scope.currentItem.OpenDate ist nicht auf Firebase gespeichert zu werden, wird der Rest der Daten zu speichern richtig. Was vermisse ich?

Antwort

22

Sie haben leider den Code nicht eingeschlossen, der die OpenDate Eigenschaft initialisiert. Aber es sieht so aus, als ob Sie versuchen, ein JavaScript Date Objekt in Firebase zu schreiben. Die Firebase documentation gibt an, dass es diese Art unterstützt:

Objekt, ein Array, String, eine Zahl, boolean oder null

Um die Date ‚s-Wert zu speichern, müssen Sie es konvertieren müssen ein unterstützter Typ Z.B.

$scope.data.accounts.push({ 
    'AccountName': $scope.currentItem.AccountName, 
    'StartBalance': $scope.currentItem.StartBalance, 
    'OpenDate': $scope.currentItem.OpenDate.toString(), 
    'AccountType': $scope.currentItem.AccountType 
}); 

Oder alternativ:

'OpenDate': $scope.currentItem.OpenDate.getTime(), 
+1

Im Allgemeinen wird 'getTime()' universeller, einfacher zu verwenden mit Abfragen und Sortierung, und insgesamt eine funktionellere Lösung. – Kato

+0

Das hat bei mir funktioniert. Vielen Dank. Ein Neuling zu sein macht manchmal keinen Spaß, aber ich muss vorwärts gehen! –

+0

@Kato Einverstanden, Im suchte nach einer Datumsbereichsabfrage. –

13

Ich wollte nur eine möglicherweise robustere Lösung werfen, die für diejenigen, die über Zeitzonen kümmern nützlich sein kann.

Ich glaube, eine gültige Lösung ist, Ihre Daten als ISO-8601 formatierte Zeichenfolgen zu speichern. Wenn Sie den verlinkten Wikipedia-Artikel lesen, werden Sie sehen, dass "die lexikographische Reihenfolge der Darstellung somit der chronologischen Reihenfolge entspricht, außer Datumsangaben, die negative Jahre enthalten."

Die Firebase docs sagen, dass 'Strings [...] are sorted lexicographically in ascending order.', so lange, wie Sie mit positiven Jahren zu tun haben, werden Sie erweiterte Zeit zu tun, sucht der Lage sein, während Zeitzone Info beibehalten wird.

+1

Ehrfürchtig. Ihre Antwort nutzt Lesbarkeit und Funktionalität, anstatt die Lesbarkeit zu opfern, wie Frank es vorgeschlagen hat! – gustavohenke

Verwandte Themen