Javascript 如何将JS日期对象传递给云函数以将其存储在Firestore上

Javascript 如何将JS日期对象传递给云函数以将其存储在Firestore上,javascript,firebase,date,google-cloud-firestore,google-cloud-functions,Javascript,Firebase,Date,Google Cloud Firestore,Google Cloud Functions,当我将一个日期对象写入Firestore时,所有操作都正常,并且我可以在数据库中看到一个日期,该日期以时间戳类型存储。如果我试图将日期对象传递给云函数,我不知道为什么,但当我将它从云函数存储到firestore DB时,它是一个空对象 firebase.functions().httpsCallable("myFunction")({date: new Date()}) <---- // this doesn't work 然后,如果我在云函数中获取它并将其存储在

当我将一个日期对象写入Firestore时,所有操作都正常,并且我可以在数据库中看到一个日期,该日期以时间戳类型存储。如果我试图将日期对象传递给云函数,我不知道为什么,但当我将它从云函数存储到firestore DB时,它是一个空对象

  firebase.functions().httpsCallable("myFunction")({date: new Date()}) <---- // this doesn't work
然后,如果我在云函数中获取它并将其存储在我的firestore中,我会看到一个具有字段秒和纳秒的对象,但没有时间戳,我的意思是它没有使用类型timestamp存储。。。因此,当我得到这个日期时,我不能应用这个方法


在这种情况下,有没有什么好方法可以将日期存储为时间戳而不是对象?

可调用函数的输入和输出完全处理JSON,因此它们仅限于表示JSON中允许的类型:字符串、数字、布尔值、空值、对象、数组。日期和时间戳不属于这些类型。Firebase SDK将要做的是尝试将自定义对象序列化为JSON,这不是您想要的方式——时间戳的秒和纳米字段在序列化过程中被拆分

如果你有一个日期要从客户那里发送,你应该把它作为一个号码发送。不要传递日期对象,而是传递其中自unix纪元起的毫秒数:

const number = date.getTime()
在接收端,在云函数中,获取数字并将其转换回日期:

const date = new Date(number)

然后,您可以将日期对象写入Firestore文档字段。

Awesome!谢谢你,道格!这似乎不太理想。我有一些复杂的文档,这些文档的日期需要更新到Firestore,还需要返回给客户。是否有处理这些情况的推荐方法?这不会保留UTC更改,并假设您的日期与服务器的UTC相同。@CooperScott几乎总是接受在API之间传递UTC日期。应用程序代码负责为用户选择的区域设置正确呈现日期。
const date = new Date(number)