Firebase日期存储出错

时间:2014-05-14 09:08:24

标签: javascript date firebase angularfire

所以我试图在Firebase中存储日期,如下所示:

 var fb = new Firebase(FIREBASE_URL);
        var syncData = $firebase(fb);
        var date = new Date(2014, 0, 1);
        console.log(date);
        syncData.$child('date').$set(date);
        var dateInFirebase = syncData.$child('date');
        dateInFirebase.$on('loaded', function(){
            console.log(dateInFirebase.$value);
        });

第一个日期正确记录' Wed Jan 01 2014 00:00:00 GMT + 0100(CET)',但是第二个日志是:' 2013-12-31T23:00 :00.000Z'这是前一天,这是火盆中的一些错误还是我错过了一些明显的东西?我还没有发现任何其他问题,所以我倾向于认为我做错了什么,我只是不知道是什么。

编辑:好的,现在我完全糊涂了,如果我用空构造函数替换dateconstructor(今天的日期),他会正确地存储日期。

4 个答案:

答案 0 :(得分:6)

使用getTime()存储日期。当您阅读它们并希望向用户显示时,请使用new Date(/* getTime value here */),它们将在任何时区正确显示。此外,客户端时钟可能会有偏差,因此您应该使用Firebase.ServerValue.TIMESTAMP而不是新的Date()。

答案 1 :(得分:3)

我弄清楚为什么Firebase会这样做,我的系统在GMT + 2时间,而new date(year, month, day)构造函数在午夜构建日期。然而,Firebase会将日期保存为UTC日期,因此从日期中减去2小时,这会导致每个日期在预定日期前一天的晚上10点保存。

这也是new Date()确实有效的原因,因为减去2小时的当前小时的日期仍有效。

解决方法是将每个日期设置为中午12:00而不是上午12:00。 如果有人知道任何更好的解决方法,我们将不胜感激。

答案 2 :(得分:0)

这个答案可能只与您有方法的语言有关,但在C#中我可以dateFromFireBase.ToLocalTime()。这假定日期与您加载时保存在同一时区,这就是我的情况。这也应该可以在javascript中使用。

答案 3 :(得分:0)

也是这样的日期商店

var cdate =  new Date(); //2016-06-14 11:34:53
        var current_date = cdate.getFullYear()+"-"+cdate.getDate()+"-"+cdate.getMonth()+" "+cdate.getHours() + ":" + cdate.getMinutes() + ":" + cdate.getSeconds();