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

旧版JavaScript字符串转Date报错,寻求有效转换方案

旧版JavaScript中ISO格式日期字符串转Date对象的解决方案

旧版JavaScript环境(比如不支持ES6语法的环境)对ISO 8601格式的日期字符串兼容性很差,直接用new Date(isoString)会返回Invalid Date。你可以通过手动解析字符串的时间分量,再用兼容性更好的Date构造函数来创建日期对象。

方案一:按本地时区解析日期

这个方法将字符串解析为本地时区的日期对象,兼容所有早期JS环境:

var tt = "2021-04-24T17:18:29.000";

function parseIsoDate(str) {
    // 拆分日期与时间部分
    var dateTimeSplit = str.split('T');
    var dateParts = dateTimeSplit[0].split('-');
    var timeParts = dateTimeSplit[1].split(':');
    
    // 拆分秒与毫秒
    var secMsSplit = timeParts[2].split('.');
    var seconds = parseInt(secMsSplit[0], 10);
    var milliseconds = secMsSplit.length > 1 ? parseInt(secMsSplit[1], 10) : 0;
    
    // 注意:JS中月份是0索引(0=1月,11=12月),需要减1
    var year = parseInt(dateParts[0], 10);
    var month = parseInt(dateParts[1], 10) - 1;
    var day = parseInt(dateParts[2], 10);
    var hours = parseInt(timeParts[0], 10);
    var minutes = parseInt(timeParts[1], 10);
    
    return new Date(year, month, day, hours, minutes, seconds, milliseconds);
}

var createDate = parseIsoDate(tt);
console.log(createDate);
console.log(createDate.getDate()); // 输出24

方案二:按UTC时区解析日期(和Node.js环境结果一致)

如果需要和Node.js环境一样,将字符串解析为UTC时区的日期对象,可使用Date.UTC方法生成时间戳后创建Date:

var tt = "2021-04-24T17:18:29.000";

function parseIsoUtcDate(str) {
    var dateTimeSplit = str.split('T');
    var dateParts = dateTimeSplit[0].split('-');
    var timeParts = dateTimeSplit[1].split(':');
    
    var secMsSplit = timeParts[2].split('.');
    var seconds = parseInt(secMsSplit[0], 10);
    var milliseconds = secMsSplit.length > 1 ? parseInt(secMsSplit[1], 10) : 0;
    
    var year = parseInt(dateParts[0], 10);
    var month = parseInt(dateParts[1], 10) - 1;
    var day = parseInt(dateParts[2], 10);
    var hours = parseInt(timeParts[0], 10);
    var minutes = parseInt(timeParts[1], 10);
    
    // 生成UTC时间戳后创建Date对象
    return new Date(Date.UTC(year, month, day, hours, minutes, seconds, milliseconds));
}

var createDate = parseIsoUtcDate(tt);
console.log(createDate); // 输出2021-04-24T17:18:29.000Z(和Node.js结果一致)
console.log(createDate.getUTCDate()); // 输出24(获取UTC日期需用getUTCDate)

以上两种方法均不依赖环境对ISO格式的支持,完全通过手动解析实现,可在不支持let等ES6语法的旧JS环境中正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:35:18