我有一个带有日期字段(开始日期)的屏幕,用户可以在其中输入任何日期
<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,其余数据正在正常保存。我错过了什么?
答案 0 :(得分:24)
遗憾的是,您没有包含初始化OpenDate
属性的代码。但您似乎正在尝试将JavaScript Date
对象写入Firebase。 Firebase documentation指定它支持以下类型:
object,array,string,number,boolean或
null
要存储Date
的值,您必须将其转换为支持的类型。 E.g。
$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(),
答案 1 :(得分:15)
我只是想抛弃一个可能更强大的解决方案,这对于那些关心时区的人来说可能是有用的。
我认为有效的解决方案是将日期存储为ISO-8601格式的字符串。如果您阅读链接的维基百科文章,您将看到“表示的词典顺序因此对应于时间顺序,除了涉及负数年的日期表示。”
Firebase文档声明'Strings [...] are sorted lexicographically in ascending order.',因此只要您处理正年,您就可以在保持时区信息的同时进行高级时间搜索。