昨天改bug时看到一个特别的写法,来研究下~
1、需求
后端传来的数据是addTime: “1702454525256”,前端要把13位时间戳转成YYYY-MM-DD HH:mm:ss这种格式,即2023-12-13 16:02:05。
2、尝试
(1)最开始直接写的:
this.moment(row.addTime).format('YYYY-MM-DD HH:mm:ss')
却显示Invalid date
(2)后来发现该页面原本的时间格式化函数有这样两行:
let res = moment(+data).format('YYYY-MM-DD HH:mm:ss')
return res
于是照猫画虎,添了个加号+,就能实现了
this.moment(+row.addTime).format('YYYY-MM-DD HH:mm:ss')
(3)另外还看到别的页面用的Number()函数或parseInt()函数,也实现了
this.moment(Number(row.addTime)).format('YYYY-MM-DD HH:mm:ss')
this.moment(parseInt(row.addTime)).format('YYYY-MM-DD HH:mm:ss')
3、总结
(1)moment转化时间戳出现Invalid date
,原因在于数据传递过程中值的类型发生了变化
,所以把字符串转成数字类型后方可正常显示。
而JS中字符串转数字有多种方法,常用的有:
①Number()函数
②parseInt()函数
③一元加号运算符+
(2)还有个需要注意的地方,如果传来的时间戳为空,用moment后会显示1970-01-01 08:00:00
所以必须判空,可使用三目运算符或者if else来处理。