【问题标题】:How do you save a DATE field in Firebase using AngularFire如何使用 AngularFire 在 Firebase 中保存 DATE 字段
【发布时间】:2015-05-04 00:52:18
【问题描述】:

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

<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,其余数据正在正确保存。我错过了什么?

【问题讨论】:

    标签: firebase angularfire


    【解决方案1】:

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

    我相信一个有效的解决方案是将您的日期存储为ISO-8601 格式化字符串。如果您阅读链接的 Wikipedia 文章,您会看到“表示的字典顺序因此对应于时间顺序,除了涉及负年份的日期表示。”

    Firebase 文档指出 'Strings [...] are sorted lexicographically in ascending order.',因此只要您处理的是正数年份,您就可以在维护时区信息的同时进行高级时间搜索。

    【讨论】:

    • 太棒了。您的答案利用了可读性和功能性,而不是像 Frank 建议的那样牺牲可读性!
    【解决方案2】:

    很遗憾,您没有包含初始化 OpenDate 属性的代码。但看起来您正在尝试将 JavaScript Date 对象写入 Firebase。 Firebase documentation 指定它支持这些类型:

    对象、数组、字符串、数字、布尔值或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(), 
    

    【讨论】:

    • 一般来说,getTime() 会更通用,更容易用于查询和排序,整体上是一个更实用的解决方案。
    • 这对我有用。非常感谢。新手有时并不好玩,但必须向前迈进!
    • @Kato 同意,我正在搜索日期范围查询。
    猜你喜欢
    • 2020-05-17
    • 2019-04-12
    • 2014-08-17
    • 1970-01-01
    • 2017-01-07
    • 2014-10-03
    • 2017-08-08
    • 1970-01-01
    相关资源
    最近更新 更多