您将如何编写方法将快照中的所有Fi还原时间戳转换为JavaScript日期?
例如,来自posts集合的快照可能返回一对Fi还原时间戳(createdDtTm,modifyDtTm):
[
{
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()),转换单个日期非常简单。
但是,在不显式指定时间戳字段的情况下,转换这两个(或任意数量的)Fi还原时间戳的更通用的方法是什么呢?
例如,Fi还原时间戳是否具有可用于标识的唯一类型?是否需要假定命名约定(例如,字段名包含DtTm)?另一个?
前面的问题回答了如何在单时间戳或快照中的多个文档中转换单个时间戳。但是,当存在多个时间戳时,我还没有找到一种在快照中转换所有时间戳的通用方法。更具体地说,我对React Provider中使用的一种方法感兴趣,这种方法可以将JavaScript日期(而不是Fi还原时间戳)传递给它的Consumers,同时也不创建依赖项来在每次向数据模型/集合中添加新的时间戳字段时更新提供程序。
发布于 2020-08-12 11:10:10
我不认为这有任何全局方法,但是我认为创建一个函数来分析快照并改变它是很容易的。不是很复杂。在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。你可以这样称呼它:
globalToData(snap.data())这将转换文档快照所有级别中的所有时间戳(我测试了第三级嵌套、混合映射和数组)。我们没有您的解决方案,但是您可以在应用程序的某个地方实现这一点。
https://stackoverflow.com/questions/63362436
复制相似问题