我有带时间戳的消防站数据。
用户将数据备份为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条答案
按热度按时间rxztt3cl1#
Credits @Rahul Kumar
对于任何人来说,toDate()不是一个函数错误可能是因为你在JSON对象上使用它。你可以简单地使用从firebase接收到的timestamp对象,或者如果你不能直接使用它,那么要将它转换回timestamp对象,你可以这样做:
现在执行timestamp.toDate()就可以了