我正在开发一个有助于项目管理的 React Web 应用程序。我面临的问题是 Firestore 的时间戳。 Firestore 中存储的每个项目对象都有一个 Firestore 时间戳类型的 createdOn
字段。我的网络应用程序正在调用一个可调用的 firebase 函数,该函数获取所有项目并返回它们。问题是 toDate()
函数在 Web 应用程序中不起作用,但在 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",
最佳答案
“我想知道问题是否是在转换为 JSON 时 timeStamp 丢失了一些东西。”
是的,它失去了一些东西。时间戳将以这样的方式序列化,即其秒和纳秒字段将单独发送。您将必须重新构建 new Timestamp object来自客户端收到的这些值。由于您没有显示非常具体的代码,因此实际上不可能提供更多信息。我强烈建议您不要仅仅依赖于时间戳的默认 JSON 序列化,而是在两端明确读取和写入其秒和纳秒字段。
另请参阅 Java 的相关问题:How to serialize Firestore TimeStamp in Android Java?
关于javascript - Firestore 时间戳通过 Callable 函数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56420690/