Node.js中使用moment转换带+0000时区的时间戳字符串返回NaN的解决方法
解决Moment.js解析特定ISO时间字符串返回NaN的问题
嘿,我刚碰到过类似的情况!你遇到的NaN问题,是因为Moment.js的自动解析对你这个时间字符串的时区格式(+0000不带冒号)识别不太友好——虽然这是合法的ISO 8601变体,但自动检测机制没跟上。给你几个靠谱的解决办法:
方法一:明确指定解析格式(最推荐)
直接告诉Moment.js你的时间字符串格式,这样解析绝对不会出错,代码如下:
const moment = require('moment'); const timeStr = "2021-09-29T05:32:48.000+0000"; // 用格式字符串匹配你的时间结构,Z对应+0000这种时区格式 const parsedTime = moment(timeStr, "YYYY-MM-DDTHH:mm:ss.SSSZ"); // 按需获取时间戳: const unixTimestamp = parsedTime.unix(); // 秒级时间戳,输出1632888768 const msTimestamp = parsedTime.valueOf(); // 毫秒级时间戳,输出1632888768000
方法二:使用parseZone方法解析
如果你的Moment.js版本比较新,parseZone方法可以直接处理带时区的字符串,还能保留时区信息:
const parsedTime = moment.parseZone("2021-09-29T05:32:48.000+0000"); console.log(parsedTime.valueOf()); // 同样输出正确的毫秒时间戳
额外小技巧:用原生Date对象应急
如果你的场景不需要复杂的时间操作,其实Node.js的原生Date对象就能直接解析这个格式:
const timeStr = "2021-09-29T05:32:48.000+0000"; const date = new Date(timeStr); console.log(date.getTime()); // 输出1632888768000
提醒一句:尽量别依赖Moment的自动解析,不同格式的时间字符串很容易触发解析异常,明确指定格式是最稳妥的方案~
内容的提问来源于stack exchange,提问作者gavisic
相关产品推荐
相关产品推荐

