gpt4 book ai didi

javascript - 将快照中的所有 Firestore 时间戳转换为 JS 日期的方法?

转载 作者:行者123 更新时间:2023-12-04 09:10:17 24 4
gpt4 key购买 nike

你会如何写一个方法来转换 全部 快照中的 Firestore 时间戳到 JavaScript 日期?
例如,来自 posts 的快照集合可能会返回几个 Firestore 时间戳( createdDtTmmodifyDtTm ):

[
{
text: 'My new post', 
uid: 'nzjNp3Q', 
createDtTm: Timestamp { seconds: 1596239999, nanoseconds: 999000000 },
modifyDtTm: Timestamp { seconds: 1596239999, nanoseconds: 999000000 },  
},
{
text: 'Another post', 
uid: 'nzjNp3Q', 
createDtTm: Timestamp { seconds: 1596239999, nanoseconds: 999000000 },
  modifyDtTm: Timestamp { seconds: 1596239999, nanoseconds: 999000000 },  
},
]
通过映射数组并使用 toDate() 来转换单个日期非常简单。每个时间戳的方法(例如, createDtTm.toDate() )
但是,在不明确指定 Timestamp 字段的情况下,转换这两个(或任意数量的)Firestore 时间戳的更通用方法是什么?
例如,Firestore 时间戳是否具有可用于识别的唯一类型?是否需要假设命名约定(例如,字段名称包含 DtTm )?其他?
以前的问题回答如何转换 single Timestampmultiple documents in a snapshot 中的单个时间戳.但是,当存在多个时间戳时,我还没有找到一种通用方法来转换快照中的所有时间戳。更具体地说,我对在 React Provider 中使用的方法感兴趣。这会将 JavaScript 日期(不是 Firestore 时间戳)传递给它的 Consumers ,同时也不会在每次将新时间戳字段添加到数据模型/集合时创建依赖项来更新 Provider。

最佳答案

我认为这没有任何全局方法,但我认为创建一个分析快照并更改它的函数很容易。这不是很复杂。在 node.js 中,我是这样做的:

function globalToData (snapshot) {
for (const field in snapshot)

if (snapshot[field] instanceof Firestore.Timestamp) {
snapshot[field] = snapshot[field].toDate()
}
else if (snapshot[field] instanceof Object) {
globalToData (snapshot[field]);
}
return snapshot;
};
如果您收到 DocumentSnapshot如前。 snap 你可以这样称呼它:
globalToData(snap.data())
这应该转换所有级别的文档快照中的所有时间戳(我测试到嵌套混合映射和数组的第 3 级)。我们没有您的解决方案,但您可以在应用程序中间的某个地方实现它。

关于javascript - 将快照中的所有 Firestore 时间戳转换为 JS 日期的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63362436/

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