You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 15:53:09