JavaScript实现字符串转日期:如何将'05-Jan-18'转换为日期格式?
将字符串'05-Jan-18'转换为JavaScript日期的几种方法
没问题,我来帮你搞定这个日期转换的需求!针对格式为'05-Jan-18'的字符串,JavaScript里有几种可靠的实现方式,我给你详细拆解一下:
方法一:手动解析字符串(最可靠,无浏览器兼容风险)
直接依赖Date构造函数解析字符串可能会有浏览器或环境差异,比如部分旧引擎可能把两位年份解析成1918而非2018。手动拆分字符串的方式完全可控,适合所有场景:
const dateStr = '05-Jan-18'; // 拆分字符串为日、月缩写、年份部分 const [dayStr, monthAbbr, yearStr] = dateStr.split('-'); // 建立月份缩写到数字的映射(注意JavaScript月份是0-11) const monthMap = { 'Jan': 0, 'Feb': 1, 'Mar': 2, 'Apr': 3, 'May': 4, 'Jun': 5, 'Jul': 6, 'Aug': 7, 'Sep': 8, 'Oct': 9, 'Nov': 10, 'Dec': 11 }; // 处理年份:如果你的业务里两位年份默认是2000年后,直接加2000即可 // 要是需要兼容更早年份,可以加判断逻辑(比如yearStr > 50 ? 1900 + num : 2000 + num) const year = parseInt(yearStr, 10) + 2000; const month = monthMap[monthAbbr]; const day = parseInt(dayStr, 10); // 创建最终的日期对象 const targetDate = new Date(year, month, day); console.log(targetDate); // 输出对应时区的2018年1月5日0点
方法二:直接使用Date构造函数(简单快捷,环境可控时推荐)
如果你的运行环境是现代浏览器或Node.js(v10+),直接把字符串传给Date构造函数就能正确解析:
const dateStr = '05-Jan-18'; const targetDate = new Date(dateStr); console.log(targetDate); // 同样会输出2018年1月5日的日期对象
注意:这种方式的兼容性依赖于引擎对DD-MMM-YY格式的支持,旧版浏览器可能出现解析失败或年份错误的情况,所以如果要兼容旧环境,优先选方法一。
方法三:结合Intl API解析(适合多语言场景)
如果你的业务涉及多语言日期处理,可以用Intl.DateTimeFormat辅助解析,但这种方式更偏向格式化输出,解析时不如手动拆分直观:
const dateStr = '05-Jan-18'; // 先构造日期对象 const targetDate = new Date(dateStr); // 用Intl格式化输出成你需要的格式,比如中文格式 const formattedDate = new Intl.DateTimeFormat('zh-CN', { year: 'numeric', month: 'long', day: 'numeric' }).format(targetDate); console.log(formattedDate); // 输出"2018年1月5日"
总结一下:如果追求兼容性和准确性,首选手动解析的方法;如果运行环境可控,直接用Date构造函数最省心。
内容的提问来源于stack exchange,提问作者Ohviya
相关产品推荐
相关产品推荐

