Unix毫秒时间戳转换可读日期格式错误问题求助
问题排查与解决
嘿,这个问题很典型——你不小心把毫秒时间戳多放大了1000倍!
错误原因分析
你给出的时间戳1525772511140是13位的毫秒级Unix时间戳,但你的代码里做了new Date(1525772511140 * 1000),这就把它变成了微秒级的超大数值,Date对象解析这个数值时,自然会返回一个离谱的远未来日期(就是你看到的50319年)。
另外,你原本的moment格式字符串DD-MM-YYYY HH:mm也不符合预期需求:
HH是24小时制,而你需要的是12小时制(带AM/PM)- 缺少秒数的显示
修正后的代码
直接去掉多余的*1000,同时调整moment的格式字符串即可。这里给你两种写法:
写法1:保留Date对象(按你原代码逻辑修改)
var timeStamp = new Date(1525772511140); // 去掉多余的*1000 var date = moment(timeStamp).format('DD-MM-YYYY h:mm:ssA'); console.log(date); // 输出:29-05-2018 9:41:51AM
写法2:直接用moment处理时间戳(更简洁)
Moment本身支持直接传入毫秒时间戳,不需要先创建Date对象:
var date = moment(1525772511140).format('DD-MM-YYYY h:mm:ssA'); console.log(date); // 输出:29-05-2018 9:41:51AM
格式字符串说明
DD:两位日期(29)MM:两位月份(05)YYYY:四位年份(2018)h:12小时制的小时(不带前导零,比如9)mm:两位分钟(41)ss:两位秒数(51)A:大写的AM/PM标识(AM)
如果想要小时带前导零(比如09),把h改成hh即可。
内容的提问来源于stack exchange,提问作者pazta
相关产品推荐
相关产品推荐

