Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firestore时间戳和Google云函数存在问题(date.toDate()不是函数)_Javascript_Google Cloud Firestore_Google Cloud Functions - Fatal编程技术网

Javascript Firestore时间戳和Google云函数存在问题(date.toDate()不是函数)

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"

我在云函数中获取一个日期(来自firestore),然后将其返回到客户端

这是结果日期对象:

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)]您是否有修复方法或知道我为什么无法创建新的时间戳?