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

Posted

技术标签:

【中文标题】将 Firebase 时间戳转换为当前时间或其他可用形式【英文标题】:Convert Firebase Timestamp to current time or other useable form 【发布时间】:2019-04-20 16:29:29 【问题描述】:

我正在尝试使用 Firebase 的时间戳,但我不了解 javascript 的文档。如何将检索到的值转换为时间(即下午 4:00)这是我一直在使用的页面: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);
 );

【问题讨论】:

【参考方案1】:

你把事情复杂化了。您不需要任何偏移量来读取服务器时间戳令牌写入的时间。表示为自 unix 纪元以来的毫秒数的日期值将仅显示为一个整数,您可以在它被服务器解释后将其提供给 new Date()

【讨论】:

与 new Date().getTime() 相比,精度有差异吗?当我记录它们时,它们似乎具有可比性。 您可能会失去时间戳的纳秒精度。

以上是关于将 Firebase 时间戳转换为当前时间或其他可用形式的主要内容,如果未能解决你的问题,请参考以下文章

如何将选定的时间戳转换为firebase服务器时间戳android

将 Firebase Firestore 时间戳转换为日期(Swift)?

Android:从firebase获取当前日期和时间

如何以毫秒为单位获取firebase服务器的当前时间戳?

将 Epoch 时间戳转换为 sql server(人类可读格式)

Firebase TIMESTAMP 到日期和时间