JavaScript中如何获取dd.mm.yyyy格式字符串并按用户地区转换?
处理dd.mm.yyyy格式字符串的地区化转换
你完全可以借助JavaScript内置的Date和Intl.DateTimeFormat实现需求,不需要自行编写转换器。核心分为两步:先将输入的dd.mm.yyyy字符串解析为合法的Date对象,再通过Intl.DateTimeFormat根据目标地区生成对应格式的日期字符串。
1. 解析dd.mm.yyyy格式字符串为Date对象
由于JavaScript的Date构造函数默认不支持直接解析dd.mm.yyyy格式,需要手动拆分字符串并转换为符合Date要求的参数(注意月份是0基索引,需要减1):
function parseDdMmYyyy(dateStr) { const [day, month, year] = dateStr.split('.').map(Number); const date = new Date(year, month - 1, day); // 可选:验证日期合法性,避免无效输入(如32.13.2023) if (date.getDate() !== day || date.getMonth() + 1 !== month || date.getFullYear() !== year) { throw new Error('无效的日期格式'); } return date; }
2. 根据目标地区格式化日期
使用Intl.DateTimeFormat指定目标地区的locale,并配置日期组件的显示格式,即可生成对应地区的日期字符串:
// 示例输入 const inputDate = '25.12.2023'; const dateObj = parseDdMmYyyy(inputDate); // 俄语地区格式(дд.мм.гггг) const ruFormat = new Intl.DateTimeFormat('ru-RU', { day: '2-digit', month: '2-digit', year: 'numeric' }); console.log(ruFormat.format(dateObj)); // 输出:25.12.2023 // 英式英语地区格式 const enGbFormat = new Intl.DateTimeFormat('en-GB', { day: '2-digit', month: '2-digit', year: 'numeric' }); console.log(enGbFormat.format(dateObj)); // 输出:25/12/2023 // 中文地区格式 const zhCnFormat = new Intl.DateTimeFormat('zh-CN', { day: '2-digit', month: '2-digit', year: 'numeric' }); console.log(zhCnFormat.format(dateObj)); // 输出:2023/12/25
关键说明
Intl.DateTimeFormat会自动遵循目标地区的日期格式规范,无需手动拼接字符串- 如果需要强制使用
日.月.年的分隔符格式(而非地区默认的分隔符),可以在配置中添加formatMatcher: 'basic',并手动处理分隔符(不过大部分使用dd.mm.yyyy类格式的地区,默认分隔符就是.)
内容的提问来源于stack exchange,提问作者Boguslav
相关产品推荐
相关产品推荐

