如何使用AngularFire在Firebase中保存日期字段

如何使用AngularFire在Firebase中保存日期字段,firebase,angularfire,Firebase,Angularfire,我有一个带有日期字段(开始日期)的屏幕,用户可以在其中输入任何日期 <label class="item item-input"> <span class="input-label">Start Date</span> <input type="date" ng-model="currentItem.OpenDate"> </label> 控制台显示以下日期 Normal date Fri May 01 2015

我有一个带有日期字段(开始日期)的屏幕,用户可以在其中输入任何日期

<label class="item item-input">
     <span class="input-label">Start Date</span>
     <input type="date" ng-model="currentItem.OpenDate">
</label>
控制台显示以下日期

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。指定它支持以下类型:

对象、数组、字符串、数字、布尔值或
null

为了存储
日期
的值,必须将其转换为支持的类型。例如

$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(), 

我只是想抛出一个可能更强大的解决方案,可能对那些关心时区的人有用

我认为一个有效的解决方案是将日期存储为格式化字符串。如果你阅读维基百科的链接文章,你会发现“表示的字典顺序与时间顺序相对应,除了日期表示包含负年份。”


Firebase文档声明,只要你处理的是正值年份,你就可以在维护时区信息的同时进行高级时间搜索。

一般来说,
getTime()
将更加通用,更易于使用查询和排序,并且总体上是一个功能更强大的解决方案。这对我来说很有用。非常感谢你。做一个新手有时并不有趣,但必须向前迈进@加藤同意了,我正在搜索日期范围查询。太棒了。您的答案利用了可读性和功能性,而不是像Frank建议的那样牺牲可读性!
  'OpenDate': $scope.currentItem.OpenDate.getTime(),