截至日期和时间的Firebase时间戳

6ss1mwsb  于 2022-09-18  发布在  Java
关注(0)|答案(22)|浏览(203)

我正在为我的聊天应用程序使用Firebase。在Chat对象中,我使用Firebase.ServerValue.TIMESTAMP方法添加时间戳。

我需要使用此时间戳在我的聊天应用程序中显示消息接收时间。

如果是当前时间,我只需要显示时间。如果有天差,我需要显示日期和时间,或者只显示日期。

我使用了以下代码来转换Firebase时间戳,但我没有获得实际时间。

var timestamp = '1452488445471';
var myDate = new Date(timestamp*1000);
var formatedTime=myDate.toJSON();

请为这个问题提出解决方案

gblwokeq

gblwokeq16#

Firebase新版本解决方案(2016年1月后)

将时间戳附加到数据库更新的正确方法是在请求中附加占位符值。在下面的示例中,Firebase将用时间戳替换createdAt属性:

firebaseRef = firebase.database().ref();
firebaseRef.set({
  foo: "bar", 
  createdAt: firebase.database.ServerValue.TIMESTAMP
});

根据documentation,值firebase.database.ServerValue.TIMESTAMP是:“由Firebase数据库服务器自动填充当前时间戳(自Unix时代以来的时间,以毫秒为单位)的占位符值。”

balp4ylt

balp4ylt17#

对于来自Google的新一代数据库FiRestore,下面的代码将简单地帮助您解决这个问题。

var admin    = require("firebase-admin");

var serviceAccount = require("../admin-sdk.json"); // auto-generated file from Google firebase.

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount)
});
var db = admin.firestore();

console.log(admin.firestore.Timestamp.now().toDate());
s4n0splo

s4n0splo18#

我知道Firebase在{seconds: '', and nanoseconds: ''}中给出了转换为日期的时间戳,您只需做:

  • 在一个变量中获取火基时间:-常量日期

然后date.toDate()=>它返回日期。

fjnneemd

fjnneemd19#

在Firebase内部,函数按如下方式转换时间戳:

timestampObj.toDate()
timestampObj.toMillis().toString()

此处的文档https://firebase.google.com/docs/reference/js/firebase.firestore.Timestamp

nuypyhwy

nuypyhwy20#

对于那些正在寻找Firebase Firestore等价物的用户。它是

firebase.firestore.FieldValue.serverTimestamp()

例如:

firebase.firestore().collection("cities").add({
    createdAt: firebase.firestore.FieldValue.serverTimestamp(),
    name: "Tokyo",
    country: "Japan"
})
.then(function(docRef) {
    console.log("Document written with ID: ", docRef.id);
})
.catch(function(error) {
    console.error("Error adding document: ", error);
});

Docs

chhkpiq4

chhkpiq421#

事实上,它只有在我使用的时候才起作用

firebase.database.ServerValue.TIMESTAMP

在命名空间上多了一个“数据库”。

pkln4tw6

pkln4tw622#

Firebase.ServerValue.TIMESTAMP不是实际的时间戳,它是一个常量,如果您将其设置为某个变量,它将被服务器中的实际值替换。

mySessionRef.update({ startedAt: Firebase.ServerValue.TIMESTAMP });
mySessionRef.on('value', function(snapshot){ console.log(snapshot.val()) })
//{startedAt: 1452508763895}

如果您希望获得服务器时间,则可以使用以下代码

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

相关问题