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

JavaScript中Date.UTC转换字符串参数出现NaN错误的解决方法

解决Date.UTC传入字符串返回NaN的问题

嘿,这个问题我之前也踩过坑!原因其实很直白:Date.UTC() 根本不接受一个完整的字符串作为输入,它需要的是分开的数值型年、月、日(可选时分秒)参数。你直接传 "2019, 10, 19" 这个字符串,它会被当成单个参数处理,自然解析失败返回 NaN 啦。

下面给你两种靠谱的修正方法,都是把字符串拆成符合要求的参数:

方法1:拆分字符串转数字数组,用扩展运算符传递

这种方法适合参数数量不固定的情况(比如有时候可能带时分秒):

let sDate = "2019, 10, 19";
// 拆分字符串、去除空格并转成数字数组
const dateParams = sDate.split(',').map(str => parseInt(str.trim(), 10));
// 用扩展运算符把数组元素逐个传给Date.UTC
let min = Date.UTC(...dateParams);
console.log(min); // 输出正确的UTC时间戳

原理很简单:split(',') 把字符串拆成带空格的子串数组,trim() 去掉每个子串的空格,parseInt 转成数字,最后 ...dateParams 把数组里的每个元素当作独立参数传入,效果和直接写 Date.UTC(2019, 10, 19) 完全一样。

方法2:解构赋值单独提取参数

如果你的日期字符串格式固定(比如永远是年、月、日三个部分),用解构赋值会更直观:

let sDate = "2019, 10, 19";
// 拆分后直接解构出年、月、日的数值
const [year, month, day] = sDate.split(',').map(str => parseInt(str.trim(), 10));
// 单独传递参数
let min = Date.UTC(year, month, day);

小提醒

要注意哦:Date.UTC() 的月份参数是0起始的(比如10代表11月),你原来直接传参数的逻辑是对的,所以不用调整月份数值~

另外别用 eval(sDate) 这种写法,虽然它能临时解决问题,但如果 sDate 是用户输入的内容,会有严重的安全风险,绝对不推荐!

内容的提问来源于stack exchange,提问作者Lara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:40:51