Firebase聊天应用中date.getFullYear()返回3991而非2022求助
问题解决:Firebase时间戳转Date年份异常
原因分析
Firebase的serverTimestamp()存储的是Timestamp类型对象,并非直接的秒数数值。直接将该对象乘以1000会触发隐式类型转换,得到错误的超大数值,最终导致Date解析出异常年份。
正确处理方式
方式1:使用Timestamp内置转换方法
Firebase Timestamp自带toDate()方法,可直接生成正确的Date对象:
// 假设从Firebase文档中获取的timestamp为firebase.firestore.Timestamp类型 const date = timestamp.toDate(); const year = date.getFullYear(); // 得到正确年份
方式2:手动提取秒数与纳秒计算
如果需要手动处理,可提取Timestamp的秒数,结合纳秒转毫秒的部分计算:
const date = new Date(timestamp.seconds * 1000 + Math.floor(timestamp.nanoseconds / 1000000)); const year = date.getFullYear();
原代码问题说明
你之前的new Date(timestamp * 1000)中,timestamp是对象类型,直接做乘法会被转为[object Object]字符串,再强制转换为无效数值,最终生成的Date对象年份自然异常。
内容的提问来源于stack exchange,提问作者Harshavardhan
相关产品推荐
相关产品推荐

