如何在Firebase的React Native中获取当前的时间戳?

9 浏览
0 Comments

如何在Firebase的React Native中获取当前的时间戳?

我按照Firebase TIMESTAMP to date and Time中的问题完全照做,代码如下所示并将其发布到我的Firebase数据库中:

function storeUserInfo(username, industry, role, color) {
  if (username != null && industry != null && role != null && color != null) { //用于以后处理错误
    let timestamp = firebase.firestore.FieldValue.serverTimestamp();
    let push = firebase.database().ref('users').push();
    push.set({
      name: username,
      industry: industry,
      role: role,
      color: color,
      date: new Date(timestamp.toDate()).toUTCString()
    });
  }
}

这给我报错:timestamp.toDate()不是一个函数

我尝试了几种其他方法,如Firebase.ServerValue.TIMESTAMP,但需要获取当前格式化的日期作为Firebase数据库的值。我该如何做?

0
0 Comments

问题的出现原因:

问题出现的原因是在使用Firebase的React Native库时,尝试在实时数据库中获取当前时间戳,但错误地使用了Firestore的时间戳。Firestore和实时数据库是不同的数据库,具有不同的API。在这里使用Firestore的时间戳是无效的。

解决方法:

如果想要获取客户端机器时钟的日期,可以直接调用new Date()方法,无需传入任何参数。建议将日期存储为整数,而不是格式化的字符串,这样在长期使用中可能更容易处理。如果想要基于数据库服务器的时间写入整数值,可以使用firebase.database.ServerValue.TIMESTAMP。这个方法会在写入到服务器时立即获取实际的整数值。如果只是希望从Firestore的时间戳API中获取服务器时间戳,那是不可能的,因为服务器时间戳只能在服务器上计算。错误提示是告诉你FieldValue类型对象没有toDate()方法可用,FieldValue类型对象是由FieldValue.serverTimestamp()返回的。它不返回一个Timestamp对象,而是返回一个令牌,你可以将其直接提供给Firestore,以便在服务器上解释时间戳而不是在客户端应用程序中解释。如果想要在该字段中使用服务器的时间戳,应该直接将该令牌提供给Firestore。

0