ユーザーが任意の日付を入力できる日付フィールド(開始日)のある画面があります
<label class="item item-input">
<span class="input-label">Start Date</span>
<input type="date" ng-model="currentItem.OpenDate">
</label>
[保存]ボタンのクリックイベントに以下を追加しました
console.log("Normal date " + $scope.currentItem.OpenDate);
コンソールには次の日付が表示されます
Normal date Fri May 01 2015 00:00:00 GMT-0400 (Eastern Daylight Time)
これがプッシュイベントです
$scope.data.accounts.Push({ 'AccountName': $scope.currentItem.AccountName, 'StartBalance': $scope.currentItem.StartBalance, 'OpenDate': $scope.currentItem.OpenDate, 'AccountType': $scope.currentItem.AccountType });
ただし、日付$scope.currentItem.OpenDate
がFirebaseに保存されておらず、残りのデータは適切に保存されています。何が足りないのですか?
残念ながら、OpenDate
プロパティを初期化するコードは含まれていませんでした。しかし、JavaScript Date
オブジェクトをFirebaseに書き込もうとしているようです。 Firebaseドキュメント は、次のタイプをサポートすることを指定しています。
オブジェクト、配列、文字列、数値、ブール値、または
null
Date
の値を保存するには、サポートされているタイプに変換する必要があります。例えば。
$scope.data.accounts.Push({
'AccountName': $scope.currentItem.AccountName,
'StartBalance': $scope.currentItem.StartBalance,
'OpenDate': $scope.currentItem.OpenDate.toString(),
'AccountType': $scope.currentItem.AccountType
});
または代わりに:
'OpenDate': $scope.currentItem.OpenDate.getTime(),
タイムゾーンを気にする人に役立つかもしれない、おそらくもっと堅牢なソリューションを捨てたかっただけです。
有効な解決策は、日付を ISO-8601 形式の文字列として保存することだと思います。リンクされたウィキペディアの記事を読むと、「表現の辞書式順序は、負の年を含む日付表現を除いて、時系列の順序に対応している」ことがわかります。
Firebaseのドキュメントには、 'Strings [...]は辞書式順序で昇順で並べ替えられています。' と記載されています。正の年を扱っている限り、高度な時間検索を実行できます。タイムゾーン情報を維持します。