导读:本期聚焦于小伙伴创作的《如何将非标准日期时间字符串转换为JavaScript Epoch时间戳》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何将非标准日期时间字符串转换为JavaScript Epoch时间戳》有用,将其分享出去将是对创作者最好的鼓励。

在JavaScript开发过程中,我们常常需要处理各种来源的日期时间数据,其中很多是不符合ISO 8601等标准格式的非标准字符串,无法直接通过常规方法转换为Epoch时间戳,需要针对性的解析逻辑。

如何将非标准日期时间字符串转换为JavaScript Epoch时间戳

什么是非标准日期时间字符串

非标准日期时间字符串指的是不满足JavaScript Date构造函数默认识别的格式要求的日期字符串,比如2024年05月20日 14:30:0005-20-2024 2:30 PM2024/五月/20 14时30分这类包含中文、自定义分隔符、非标准月份表述的字符串。

直接使用new Date(非标准字符串)通常会返回Invalid Date,无法获取有效的时间戳,因此需要先解析字符串提取年、月、日、时、分、秒等核心字段,再构造标准日期对象。

核心转换思路

转换非标准日期时间字符串为Epoch时间戳的核心流程分为三步:

  • 使用正则表达式匹配并提取字符串中的年、月、日、时、分、秒等时间字段
  • 将提取到的字段处理为数值类型,注意月份在JavaScript中是从0开始计数的,需要减1
  • 使用new Date(year, month, day, hour, minute, second)构造日期对象,再调用getTime()方法获取Epoch时间戳

常见场景代码示例

场景1:处理带中文的日期格式

比如字符串2024年05月20日 14:30:00,我们可以通过正则提取对应字段:

// 待转换的非标准日期字符串
const dateStr = '2024年05月20日 14:30:00';
// 正则匹配年、月、日、时、分、秒
const reg = /(d{4})年(d{2})月(d{2})日s+(d{2}):(d{2}):(d{2})/;
const matchResult = dateStr.match(reg);
if (matchResult) {
    // 提取字段并转换为数值,月份需要减1
    const year = parseInt(matchResult[1], 10);
    const month = parseInt(matchResult[2], 10) - 1;
    const day = parseInt(matchResult[3], 10);
    const hour = parseInt(matchResult[4], 10);
    const minute = parseInt(matchResult[5], 10);
    const second = parseInt(matchResult[6], 10);
    // 构造日期对象
    const dateObj = new Date(year, month, day, hour, minute, second);
    // 获取Epoch时间戳,单位为毫秒
    const epochTimestamp = dateObj.getTime();
    console.log(epochTimestamp); // 输出 1716186600000
} else {
    console.log('日期字符串格式不匹配');
}

场景2:处理带AM/PM的12小时制格式

对于05-20-2024 2:30 PM这类带AM/PM标识的字符串,需要额外处理小时字段:

const dateStr2 = '05-20-2024 2:30 PM';
// 正则匹配月、日、年、小时、分钟、时段标识
const reg2 = /(d{2})-(d{2})-(d{4})s+(d{1,2}):(d{2})s+(AM|PM)/i;
const matchResult2 = dateStr2.match(reg2);
if (matchResult2) {
    let month = parseInt(matchResult2[1], 10) - 1;
    const day = parseInt(matchResult2[2], 10);
    const year = parseInt(matchResult2[3], 10);
    let hour = parseInt(matchResult2[4], 10);
    const minute = parseInt(matchResult2[5], 10);
    const period = matchResult2[6].toUpperCase();
    // 处理12小时制转24小时制
    if (period === 'PM' && hour !== 12) {
        hour += 12;
    } else if (period === 'AM' && hour === 12) {
        hour = 0;
    }
    const dateObj2 = new Date(year, month, day, hour, minute, 0);
    const epochTimestamp2 = dateObj2.getTime();
    console.log(epochTimestamp2); // 输出 1716186600000
}

场景3:处理带自定义月份中文的格式

如果遇到2024/五月/20 14时30分这类月份用中文表示的字符串,需要先建立中文月份到数字的映射:

const dateStr3 = '2024/五月/20 14时30分';
// 中文月份映射表
const monthMap = {
    '一月': 0, '二月': 1, '三月': 2, '四月': 3, '五月': 4, '六月': 5,
    '七月': 6, '八月': 7, '九月': 8, '十月': 9, '十一月': 10, '十二月': 11
};
// 正则匹配年、中文月、日、时、分
const reg3 = /(d{4})/(.+?)/(d{1,2})s+(d{1,2})时(d{1,2})分/;
const matchResult3 = dateStr3.match(reg3);
if (matchResult3) {
    const year = parseInt(matchResult3[1], 10);
    const month = monthMap[matchResult3[2]];
    const day = parseInt(matchResult3[3], 10);
    const hour = parseInt(matchResult3[4], 10);
    const minute = parseInt(matchResult3[5], 10);
    if (month !== undefined) {
        const dateObj3 = new Date(year, month, day, hour, minute, 0);
        const epochTimestamp3 = dateObj3.getTime();
        console.log(epochTimestamp3); // 输出 1716186600000
    }
}

注意事项

  • 正则匹配时要根据实际的字符串格式调整正则规则,避免匹配错误
  • JavaScript的月份是从0开始计数的,1月对应0,12月对应11,转换时记得减1
  • 如果字符串包含时区信息,需要在构造日期对象时处理时区偏移,避免时间戳出现偏差
  • 对于无法匹配格式的字符串,要做好异常兜底,避免代码报错
Epoch时间戳指的是从1970年1月1日00:00:00 UTC到当前时间的总毫秒数,JavaScript中Date对象的getTime()方法返回的就是这个值。

JavaScriptEpoch时间戳日期时间转换非标准日期字符串修改时间:2026-06-14 08:27:30

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。