通过从应用程序直接向Firebase发送DateTime对象,可以自动转换为TimeStamp格式。然而,如果我通过云函数发送相同的对象,我会得到以下错误:
Invalid argument: Instance of 'DateTime'
我尝试使用toString()
方法传递对象,并通过运行Date.parseDate.parse(data["birth_date"])
进行后端转换。但在Firestore上,数据记录为数字,而不是时间戳。
颤振代码:
//final DateTime birthDate; -> To show you the type
final HttpsCallable callable =
CloudFunctions(region: "europe-west3").getHttpsCallable(
functionName: 'userFunctions-editUser',
);
HttpsCallableResult httpsCallableResult =
await callable.call({"birth_date": birthDate});
服务器端代码:
exports.addUser = functions
.region("europe-west3")
.https.onCall((data, context) => {
const userUid = data["userUid"];
const docRef = admin.firestore().doc(`/users_profils/${userUid}`);
return docRef.set({
...
birth_date: Date.parse(data["birth_date"]),
...
});
});
如何使用Cloud函数将DateTime对象转换为TimeStamp?
Cloud Functions客户端SDK对从平台日期类型到Firestore时间戳的转换一无所知。您必须自己找到一种方法,只传递函数SDK能够理解的有效类型(如数字和字符串(。
一种方法是将DateTime转换为一个数字(通常为epoch后的毫秒(,并将该数字作为参数发送给函数。然后,在函数中,将该数字转换为JavaScriptDate对象,并将其提供给Firestore,后者将其转换为时间戳类型字段。