Javascript Firestore时间戳和Google云函数存在问题(date.toDate()不是函数)
我在云函数中获取一个日期(来自firestore),然后将其返回到客户端 这是结果日期对象:Javascript Firestore时间戳和Google云函数存在问题(date.toDate()不是函数),javascript,google-cloud-firestore,google-cloud-functions,Javascript,Google Cloud Firestore,Google Cloud Functions,我在云函数中获取一个日期(来自firestore),然后将其返回到客户端 这是结果日期对象: Object { "_nanoseconds": 1607618708, "_seconds": 615000000, } // I know how to convert this to a javascript date object, but I need the .toDate() t { "nanoseconds"
Object {
"_nanoseconds": 1607618708,
"_seconds": 615000000,
} // I know how to convert this to a javascript date object, but I need the .toDate()
t {
"nanoseconds": 1607618708,
"seconds": 615000000,
}
然后,在前端,如果我执行date.toDate(),我会得到错误“.toDate不是一个函数”
另一方面,如果我直接从客户那里得到相同的日期,一切都会很完美。。。(.toDate()是一个函数)
这是结果日期对象:
Object {
"_nanoseconds": 1607618708,
"_seconds": 615000000,
} // I know how to convert this to a javascript date object, but I need the .toDate()
t {
"nanoseconds": 1607618708,
"seconds": 615000000,
}
这里发生了什么?我怎样才能解决这个问题
更新
->不起作用的代码:
// Cloud Function
var userData = await firebase.getUserData(userId); // userRef.get().then(doc => ... return doc.data());
console.log(userData.birthday);
/*
Timestamp {
_seconds: 1038832012,
_nanoseconds: 14000000
}
*/
return { userData }
// Client side
firebase.functions.httpsCallable(...)(...).then(res => {
console.log(res.data.userData.birthday);
/*
Object {
"_nanoseconds": 1607618708,
"_seconds": 615000000,
}
new Date(date._seconds * 1000) will work but I need to execute .toDate()
*/
const birthday = res.data.userData.birthday.toDate();
// ERROR: .toDate is undefined
})...
->工作的代码(无服务器端):
谢谢。可调用函数仅将对象序列化为JSON。当SDK序列化时间戳时,它仅获取其字段并从中构造一个新的JSON对象。该对象没有正式类型。它只是一个普通的对象,它在对象内部发现了两个数据字段——秒和纳秒
客户端将接收带有两个字段的JSON,但不一定知道它来自时间戳。您必须在客户端应用程序上编写代码,以将带有秒和纳秒的JSON对象转换回时间戳(如果它想使用的话)。一旦你有了秒和纳米,你可以简单地用它的(
newtimestamp(秒,纳米)
)创建一个新的时间戳。然后可以对该时间戳调用toDate()
。要做到这一点,除了你自己提供的以外,实在没有捷径。请编辑问题,以显示前端和后端都无法按预期方式工作的代码。@DougStevenson Donehy Doug。我遇到了这个问题-并不断得到以下错误:undefined不是构造函数(评估'new'u firebase.default.Timestamp(seconds,nanoseconds)]您是否有修复方法或知道我为什么无法创建新的时间戳?