json Firestore timestame使用toDate()不是函数错误

vtwuwzda  于 2023-07-01  发布在  其他
关注(0)|答案(1)|浏览(109)

我有带时间戳的消防站数据。
用户将数据备份为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。还是我的代码错了?

我不知道该怎么尝试。我希望得到正确的命令。

v8wbuo2f

v8wbuo2f1#

Credits @Rahul Kumar
对于任何拥有toDate()不是函数的人来说,错误可能是因为你在JSON对象上使用它。你可以简单地使用从firebase接收到的timestamp对象,或者如果你不能直接使用它,那么要将它转换回timestamp对象,你可以这样做:

const timestamp = new firebase.firestore.Timestamp(jsonTimestamp.seconds, jsonTimestamp.nanoseconds)

现在执行timestamp.toDate()就可以了

相关问题