如何实现基于locale的字符串转Date对象解析,适配不同地区日期格式
基于locale的日期字符串转Date对象实现方案
直接基于浏览器原生IntlAPI实现,无需引入第三方依赖,可自动适配不同地区的日期排列规则:
function parse(dateStr, locale) { // 获取指定locale的日期部件排列顺序 const dtf = new Intl.DateTimeFormat(locale); const formatParts = dtf.formatToParts(new Date()); // 过滤出年月日的顺序规则 const partOrder = formatParts .filter(item => ['year', 'month', 'day'].includes(item.type)) .map(item => item.type); // 拆分输入的日期字符串,默认支持/、-作为分隔符,可按需扩展 const inputParts = dateStr.split(/[\/\-]/).map(Number); // 按照地区规则映射年月日值 const dateConfig = {}; partOrder.forEach((type, index) => { dateConfig[type] = inputParts[index]; }); // JS Date对象月份从0开始计数,需要减1处理 return new Date(dateConfig.year, dateConfig.month - 1, dateConfig.day); }
测试验证
和示例效果完全一致:
parse('1/2/2021', 'en-US') // 输出:Sat Jan 02 2021 00:00:00 GMT+0530 parse('1/2/2021', 'en-IN') // 输出:Mon Feb 01 2021 00:00:00 GMT+0530
补充说明
- 当前实现默认处理仅包含年月日的短日期格式,如果需要支持带时间、星期的场景,扩展
filter的匹配类型即可 - 可根据业务需求修改拆分字符串的正则,比如需要支持
.作为分隔符,将正则调整为/[\/\-\.]/即可 - 原生
IntlAPI兼容所有现代浏览器、Node.js 13及以上版本,如有低版本兼容需求可引入对应polyfill
内容的提问来源于stack exchange,提问作者Anil
相关产品推荐
相关产品推荐

