我有带时间戳的消防站数据。
用户将数据备份为JSON文件-Export-Function
const dataStr = JSON.stringify(todos);
let dataUri = 'data:application/json;charset=utf-8,' + encodeURIComponent(dataStr);
let fileName = 'data.json';
let linkElement = document.createElement('a') as HTMLAnchorElement;
linkElement.setAttribute('href', dataUri);
linkElement.setAttribute('download', fileName);
linkElement.click();
然后用户将恢复数据-Import-Function
const uploadFile = fileInput.files[0];
const fileReader = new FileReader();
fileReader.onload = async (e) => {
const dataStr = e.target?.result as string;
const newDatas = JSON.parse(dataStr) as todosProps[];
console.log(newDatas);
settodos([
...todos,
...newDatas
]);
try {
newDatas.map(async (d) => {
await setDoc(doc(collectionRef, d.id.toString()), {
...d,
});
});
console.log('finish import');
} catch (error) {
console.error(error);
}
我注意到,firestore timestamp对象值在转换为JSON时有不同的构造方法。
所以我不能在导入文件中使用firestore函数“.toDate().toMillis“。这就是为什么它与原始时间戳不同。可能是我把原始数据转换成了JSON。还是我的代码错了?
我不知道该怎么尝试。我希望得到正确的命令。
1条答案
按热度按时间v8wbuo2f1#
Credits @Rahul Kumar
对于任何拥有toDate()不是函数的人来说,错误可能是因为你在JSON对象上使用它。你可以简单地使用从firebase接收到的timestamp对象,或者如果你不能直接使用它,那么要将它转换回timestamp对象,你可以这样做:
现在执行timestamp.toDate()就可以了