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