【问题标题】:Firebase Date storage goes wrongFirebase 日期存储出错
【发布时间】:2014-05-14 09:08:24
【问题描述】:

所以我想像这样在 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);
        });

第一个日期正确记录了“2014 年 1 月 1 日星期三 00:00:00 GMT+0100 (CET)”,但是第二个日志是这样的:“2013-12-31T23:00:00.000Z”是前 1 天那,这是firebase中的一些错误还是我遗漏了一些明显的东西?我没有发现任何其他问题,所以我倾向于认为我做错了什么,我只是不知道是什么。

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

【问题讨论】:

    标签: javascript date firebase angularfire


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      这也是new Date() 起作用的原因,因为当前时间减去 2 小时的日期仍然有效。

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

      【讨论】:

        【解决方案3】:

        这个答案可能只与你有方法的语言相关,但在 C# 中我可以做到dateFromFireBase.ToLocalTime()。这假设日期保存在您加载它的同一时区,对我来说就是这种情况。这在javascript中也应该是可能的。

        【讨论】:

          【解决方案4】:

          还有这样的日期存储

          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();
          

          【讨论】:

            猜你喜欢
            • 2018-07-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-04-11
            • 2018-01-09
            • 1970-01-01
            • 2016-09-25
            相关资源
            最近更新 更多