使用child_added时,Firebase服务器值时间戳未转换

时间:2019-03-07 15:42:11

标签: javascript firebase firebase-realtime-database

在firebase网站中使用“ child_added”,即时通讯试图转换名为“ requestTimestamp”的时间戳的值,但我一直得到“ 1/1/1970 8:00 AM”的值。每当我刷新网页时,都会转换时间戳。

var urlRef = firebase.database().ref().child("/Rescue Requests/New Rescue 
Requests/");

urlRef.on("child_added", function(snapshot) 
var valTimestamp = snapshot.child("requestTimestamp").val();

        var myDate = new Date(valTimestamp);

            //YEAR FORMAT MM/DD/YY
            var result = ((myDate.getMonth().toString().length > 1) ? (myDate.getMonth() + 1) : 
                ('0' + (myDate.getMonth() + 1))) + '/' + ((myDate.getDate().toString().length > 1) ? myDate.getDate() :
                ('0' + myDate.getDate())) + '/' + myDate.getFullYear();

            //TIME FORMAT 12 HOURS
            var hours = myDate.getHours();
            var minutes = myDate.getMinutes();
            var ampm = hours >= 12 ? 'PM' : 'AM';
            hours = hours % 12;
            hours = hours ? hours : 12; // the hour '0' should be '12'
            minutes = minutes < 10 ? '0'+minutes : minutes;
            var strTime = hours + ':' + minutes + ' ' + ampm;

    cellTime.appendChild(document.createTextNode(result +" "+strTime));

2 个答案:

答案 0 :(得分:0)

我正在开发一个android应用程序,我也遇到了这个问题。一个月前,它是正确的。我认为这是firebase的错误。

答案 1 :(得分:0)

child_added事件仅在以下情况下触发:

  1. 数据最初已加载
  2. 添加了一个新的子节点

添加带有服务器端时间戳的新子级时,会发生一些事情:

  1. 添加节点的Firebase客户端会立即触发新节点的child_added事件,并以其对数据的最佳猜测。
  2. 客户端将数据发送到服务器。
  3. 服务器会验证写入,并确保根据安全规则允许写入,并扩展所有标记(即服务器端时间戳标记)。
  4. 然后服务器将结果发送回客户端。
  5. 客户端触发将其数据与服务器的数据调和所需的所有事件

在最后一步中,它需要更改时间戳,因为其最初的估计可能是错误的。因此,在这种情况下,它将为该节点触发一个child_changed事件。

类似地,如果服务器由于安全规则而拒绝写入,则客户端将触发child_removed事件以进行协调。