当我将Date对象写入我的Firestore时,所有对象都能正常工作,并且我可以在DB中看到存储类型为";时间戳";。如果我试图将Date对象传递给云函数,我不知道为什么,但当我将其从云函数存储到firestore DB时,它是一个空对象。
firebase.functions().httpsCallable("myFunction")({date: new Date()}) <---- // this doesn't work
因此,我决定在将Date对象发送到云函数之前,在客户端将其转换为firestore时间戳。如下:
date = firebase.firestore.Timestamp.fromDate(date);
firebase.functions().httpsCallable("myFunction")({date})
然后,如果我把它放在云函数中并存储在我的火库中,我会看到一个带有字段"的对象;秒";以及";纳秒";,但不是时间戳(我的意思是它不是用时间戳类型存储的(。。。因此,当我得到这个日期时,我无法应用.toDate((方法
在这种情况下,有没有什么好的方法可以将日期存储为时间戳而不是对象?
可调用函数的输入和输出完全处理JSON,因此它们仅限于表示JSON中允许的类型:字符串、数字、布尔值、null、对象、数组。日期和时间戳不属于这些类型。Firebase SDK将尝试将自定义对象序列化为JSON,但这并不是你想要的方式——时间戳的秒和纳米字段在序列化过程中被拆分。
如果你有一个日期要从客户端发送,你应该只把它作为一个数字发送。与其传递Date对象,不如传递其中的单个数字(自unix epoch以来的毫秒数(:
const number = date.getTime()
在接收端,在云功能中,取数字并将其转换回日期:
const date = new Date(number)
然后可以将Date对象写入Firestore文档字段。