我使用Firebase作为我的数据库和nextjs。我想从firebase读取数据。当我试图读取到期日,这是一个时间戳数据类型,我面临这个错误。下面是我如何从Firebase代码中读取数据:
const dbInstance = collection(firestore, "tasks");
useEffect(() => {
getTasks();
}, []);
const getTasks = () => {
getDocs(dbInstance).then((data) => {
setTasksArray(
data.docs.map((item) => {
return { ...item.data() };
})
);
});
};
在return语句中,当我试图Map所有任务时,一切都很顺利,除了date.so我在谷歌上搜索解决方案并看到toDate()函数。我使用了task.duedate.toDate()
,出现了错误
我能做的最好的就是:
{tasksArray.map((task) => {
return (
<Flex
flexDir={"column"}
key={task.creatorId}
hidden={task.priority != "" ? true : false}
>
<Text>{task.taskName}</Text>
<Text fontSize="xs">
{safeJsonStringify(task.dueDate)}
</Text>
</Flex>
);
})}
它返回了以下内容:{“秒”:1683300279,“纳秒”:338000000}
但我打算以一种温和的方式显示它,就像在stackoverflow中一样
1条答案
按热度按时间sg3maiej1#
假设
基于最新的输出,我假设
dueDate
字段是一个JS对象,而不是Firebase Timestamp的示例,其格式类似于:然后,如果它是一个Object,则没有内置方法
.toDate
。鉴于上述假设,这里有两个解决方案:1.在Object外创建Firebase时间戳
这将示例化一个可以访问
.toDate
方法的实际Timestamp。2.使用时间算法将JS对象转换为Date
JavaScript在
new Date()
构造函数上接受毫秒。然后,您可以将对象数据转换为毫秒,然后通过执行以下操作构建JS Date:
我已经在CodeSandbox上举例说明了这两种方法:https://codesandbox.io/s/infallible-khayyam-68iw0p?file=/src/App.js