将Firebase时间戳转换为当前时间或其他可用形式。

11 浏览
0 Comments

将Firebase时间戳转换为当前时间或其他可用形式。

我正在尝试使用Firebase的时间戳,但我不理解JavaScript的文档。你如何将检索到的值转换成时间(例如下午4点)?我一直在使用这个页面:https://firebase.google.com/docs/database/web/offline-capabilities#server-timestamps

似乎你可以使用.set(firebase.database.ServerValue.TIMESTAMP);来设置时间戳,然后使用以下代码来检索时间戳和客户端的时钟偏差:

 var offsetRef = firebase.database().ref(".info/serverTimeOffset");
 offsetRef.on("value", function(snap) {
    var offset = snap.val();
    var estimatedServerTimeMs = new Date().getTime() + offset;
    });

由于你检索到的是“Firebase服务器确定的自Unix纪元以来的当前时间戳(以毫秒为单位)的占位符值”,似乎无法按照此人在此处提问的方式进行操作,这也是我原本的做法:Firebase TIMESTAMP to date and Time

var timestamp = '1452488445471';
var myDate = new Date(timestamp);

我真的不理解这个答案:

 fb.ref("/.info/serverTimeOffset").on('value', function(offset) {
   var offsetVal = offset.val() || 0;
   var serverTime = Date.now() + offsetVal;
  });

这是我的代码:

 let timestamp;
 let timestampRef = firebase.database().ref("server");
timestampRef.set(firebase.database.ServerValue.TIMESTAMP);
timestampRef.on("value", function(snap) {
  let offset = snap.val();
  let estimatedServerTimeMs = new Date().getTime() + offset;
  console.log("time stamp: ", timestampRef);
  console.log("offset: ", offset);
  console.log("estimatedServerTimeMs: ", estimatedServerTimeMs);
 });

0
0 Comments

问题出现的原因:在使用Firebase的时间戳时,可能需要将时间戳转换为当前时间或其他可用形式。问题可能是由于时间戳的精度丢失导致的。

解决方法:通过将时间戳转换为整数,并使用new Date()函数将其解释为日期对象,可以将时间戳转换为当前时间或其他可用形式。这样可以避免使用偏移量来读取由服务器时间戳标记写入的时间。与new Date().getTime()相比,转换后的时间戳具有相当的精度。但需要注意的是,时间戳可能会丢失纳秒级的精度。

0