Firebase 函数将日期时间存储为地图

use*_*616 2 javascript firebase vue.js google-cloud-functions google-cloud-firestore

我设置了 firebase 函数,可以使用 onCall 方法在 firestore 数据库中创建一个新事件。我正在将数据从我的前端 vue 应用程序传递到 onCall 方法。我想在数据库中设置的数据包含一堆数据,其中有一些需要保存的日期。日期是未来的日期/时间,一旦将它们添加到 firestore 数据库,它们就会显示为类型map而不是timestamp

我的 firebase-admin 版本是 8.0.0,firebase-functions 版本是 3.0.0

这会将数据添加到集合中,但时间戳现在采用map纳秒和秒的类型。如何才能将其保存在Timestamp类型中?

前端js调用onCall:

let data = {
  firstName: 'John',
  lastName: 'Doe',
  startDate: myStartDate  // This is a JS date object - Fri Aug 30 2019 17:00:00 GMT-0500 (Central Daylight Time)
};
return db.httpsCallable('myFunction')({ myData: data });
Run Code Online (Sandbox Code Playgroud)

谷歌后台功能:

exports.myFunction= functions.https.onCall((data, context) => {
  const myData = data.myData;
  return admin
    .firestore()
    .collection('myCollection')
    .doc('myDocument')
    .collection('myAccount')
    .add({ ...myData  });
});
Run Code Online (Sandbox Code Playgroud)

Dou*_*son 5

当您使用可调用函数时,输入对象中的所有类型信息在发送到函数之前都将被完全剥离。它将被序列化为 JSON,即对象、数组、数字、字符串、布尔值和空值。时间戳将被序列化为秒和纳秒,因为这就是它的内部表示方式。

如果您想将时间戳发送到可调用函数,您的函数应该准备好接收秒和纳秒,并使用这些值创建一个新的 Timestamp 对象,然后将它们传递给 Firebase Admin SDK,Firebase Admin SDK 将正确解释它。