好吧,我已经按字面意思Firebase TIMESTAMP to date and Time关注了这个问题,并像这样发布到我的Firebase数据库中:
function storeUserInfo(username, industry, role, color) {
if (username != null && industry != null && role != null && color != null) { //use for errors later
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() is not a function
我尝试了其他几种方法,例如Firebase.ServerValue.TIMESTAMP
,但需要获取Firebase数据库的当前格式化日期。我该怎么办?
答案 0 :(得分:1)
您在这里遇到了一些问题。首先,您尝试通过firebase.database()
写入Realtime Database,但是您尝试使用Firestore的时间戳。 Firestore和实时数据库是具有不同API的不同数据库。 Firestore时间戳在这里对您没有帮助。
如果要获取客户端计算机时钟估计的日期,只需调用不带参数的new Date()
。
push.set({
name: username,
industry: industry,
role: role,
color: color,
date: new Date().toUTCString()
});
我建议实际上只存储一个整数而不是一个格式化的字符串-从长远来看,对您来说可能会更容易。
如果您想根据数据库服务器的时间写整数值,则可以使用ServerValue.TIMESTAMP来做到这一点,FieldValue会在写入服务器时立即获取实际的整数值:>
date: firebase.database.ServerValue.TIMESTAMP
如果您实际上只是希望从Firestore的Timestamp API获取服务器时间戳,那是不可能的,因为只能在服务器上计算服务器时间戳。该错误告诉您FieldValue.serverTimestamp()返回的Timestamp类型的对象上没有toDate()
方法可用。它不会返回{{3}}。它返回您可以提供给Firestore的令牌,该令牌解释服务器上而不是客户端应用程序中的时间戳。如果要在该字段中使用服务器的时间戳,则应直接将此令牌提供给Firestore: