将来自ionic-datepicker的val返回值保存到Firebase

时间:2015-08-09 18:47:29

标签: angularjs datepicker ionic-framework firebase

我正在使用ionic-datepicker(ionic -datepicker)让用户选择时间。我在我的控制器中有这个代码来返回选择的val用户:

$scope.datePickerCallback = function (val) {
        if(typeof(val)==='undefined'){      
            console.log('Date not selected');
        }else{
            console.log('Selected date is : ', val);
            $scope.pickedDate = val;
        }
    };

然后我尝试将$ task(在task.date之类的属性中包含此val)添加到$ firebaseArray中。我的firebase继续拒绝许可:

FIREBASE WARNING: set at /tasks/-JwIkrTLg5XvrhjLVRTJ failed: permission_denied 

我在添加到firebase之前控制台登录。 date属性的输出是:

日期:2015年8月21日星期五00:00:00 GMT-0700(PDT) 原型:无效日期。

那么如何将日期对象保存到Firebase中?我需要为此制定一些规则吗?或者我是否需要使用val来保存它。我需要做的一件事是使用像Firebase.ServerValue.TIMESTAMP这样的val。所以我可以将日期值转换为不同的可读时间格式,进行时间计算和所有类型的东西。我可以将val转换为String并在Firebase中成功保存。但是我将丢失日期对象可以执行的所有功能(例如带有返回值的moment.js)

1 个答案:

答案 0 :(得分:3)

Firebase只能存储有效的JSON类型,而JavaScript Date不是这种类型。

您希望存储日期/时间有两个常见原因:

  1. 稍后再显示
  2. 将其与其他日期/时间进行比较
  3. 如果您存储日期的原因是您希望稍后再显示该日期,则您希望将其存储为字符串:

    task.date = val.toString();
    

    如果您想存储日期以便以后可以将其与其他日期进行比较(或获取一段时间内的所有任务),那么您将要存储所谓的日期时间戳:

    task.timestamp = val.getTime();
    

    JavaScript的Date.getTime()函数返回自1970年1月1日00:00:00 UTC以来的毫秒数。

    如果对两种类型使用不同的属性,则可以存储文本显示值和用于排序的数值。另外,您可以使用以下命令从时间戳重建Date

    new Date(task.timestamp)