【问题标题】:Firebase new Date()?Firebase 新日期()?
【发布时间】:2013-05-05 09:05:34
【问题描述】:

我是 Firebase 的新手,我想知道如何存储 JavaScript 日期并稍后使用 Firebase 在客户端进行比较?

我想做这样的事情:

var someDate = new Date();
myRootRef.set(someDate);

myRootRef.on('value', function(snapshot) {
     var currDate = new Date();
if (currDate >=  snapshot.val()){
     //do something
}

但是,我从快照中获得了 null 的值?

【问题讨论】:

    标签: javascript datetime firebase


    【解决方案1】:

    您也可以使用时间戳。

    var timestamp = new Date().getTime();
    myRootRef.set(timestamp);
    
    myRootRef.on('value', function(snapshot) {
        var currDate = new Date();
        var snapshotTimestamp = snapshot.val();
    
        //you can operate on timestamps only...
        console.log("Snapshot timestamp: " + snapshotTimestamp);
    
        if(currDate.getTime() >= snapshotTimestamp) {
            //do something
        }
    
        //...or easily create date object with it  
        console.log("Snapshot full date: " + new Date(snapshotTimestamp));
    
        if (currDate >=  new Date(snapshotTimestamp)){
            //do something
        }
    
    });
    

    【讨论】:

    • 此外,除非两个日期来自同一个客户,否则您可能需要咨询.info/serverTimeOffset 并将其添加到时间戳:new Date().getTime() + offset;否则对于那些不在原子时间的一秒内保持时钟同步的用户来说,你会感到有些奇怪
    • 感谢您的回复和代码示例!我真的很感激!
    【解决方案2】:

    您需要使用字符串或带有值的对象设置 Firebase,然后在事件中读取相同的值。

        var someDate = new Date();
        myRootRef.set({Date: someDate.toString()});
    
        myRootRef.on('value', function(snapshot) {
        var msg = snapshot.val();
         var currDate = new Date();
        if (currDate >=  msg.Date){
         //do something
        }
        });
    

    【讨论】:

    • 将日期作为字符串进行比较不会实现正确的日期比较,因此您可能需要使用@ghost 推荐的时间戳方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 2021-06-09
    • 2018-07-29
    • 2015-12-31
    相关资源
    最近更新 更多