首页 > 解决方案 > 通过可调用函数传递的 Firestore 时间戳

问题描述

我正在开发一个有助于项目管理的反应网络应用程序。我面临的问题是围绕 Firestore 的时间戳。存储在 Firestore 中的每个项目对象都有一个createdOnFirestore 时间戳类型的字段。我的网络应用程序正在调用一个可调用的 firebase 函数,该函数获取所有项目并返回它们。问题是该toDate()功能在网络应用程序中不起作用,但它在 firebase 功能中起作用。我想知道问题是否是在转换为 JSON 时 timeStamp 丢失了一些东西。我是否遗漏了某些东西,还是应该将它们存储为某些东西?我真的不想在服务器端转换所有日期,因为这会减慢函数调用的速度。我正在使用时间戳在客户端进行过滤和分析。

我如何将时间戳记作为项目对象的一部分:createdOn: admin.firestore.Timestamp.now(),

在我正在测试的可调用函数中:console.log(allProjects[0].createdOn!.toDate())这有效。

在我的网络应用程序中,我正在调用它data.createdOn.toDate() 并收到错误TypeError: data.createdOn.toDate is not a function

任何帮助,将不胜感激。谢谢,

我在功能方面使用

"firebase-admin": "^8.0.0",
"firebase-functions": "^2.3.1",

和客户端

"firebase": "^6.1.0",
"typescript": "^3.5.1"
"react": "^16.8.6",

标签: javascriptfirebasegoogle-cloud-firestoregoogle-cloud-functions

解决方案


“我想知道问题是否是在转换为 JSON 时 timeStamp 丢失了一些东西。”

是的,它失去了一些东西。Timestamp 将以这样的方式进行序列化,即其 seconds 和 nanoseconds 字段将单独发送。您必须从客户端收到的那些值中重新构建一个新的 Timestamp 对象。由于您没有显示非常具体的代码,因此不可能提供更多信息。我强烈建议您不要仅仅依赖于 Timestamp 的默认 JSON 序列化,而是专门在两端显式地读取和写入其 seconds 和 nanoseconds 字段。

另请参阅 Java 的相关问题:How to serialize Firestore TimeStamp in Android Java?


推荐阅读