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
相关产品推荐
相关产品推荐

