所以我试图在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(今天的日期),他会正确地存储日期。
答案 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();