gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:10:40 26 4
gpt4 key购买 nike

当我将 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})

然后,如果我在云函数中获取它并将其存储在我的 Firestore 中,我会看到一个具有“秒”和“纳秒”字段的对象,但没有时间戳(我的意思是它不以 Timestamp 类型存储)...所以当我得到这个日期时,我无法应用方法 .toDate()

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

最佳答案

可调用函数的输入和输出完全与 JSON 打交道,因此它们仅限于表达 JSON 中允许的那些类型:字符串、数字、 bool 值、空值、对象、数组。 Date 和 Timestamp 不属于这些类型。 Firebase SDK 将做的是尝试将自定义对象序列化为 JSON,这不是您想要的方式 - 时间戳的秒和纳秒字段在序列化期间被拆分。

如果您有要从客户端发送的日期,您应该将其作为数字发送。不要传递 Date 对象,而是传递其中的单个数字(自 unix 纪元以来的毫秒数):

const number = date.getTime()

在接收方,在 Cloud Functions 中,获取数字并将其转换回日期:

const date = new Date(number)

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

关于javascript - 如何将 JS 日期对象传递给云函数以将其存储在 Firestore 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63912795/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com