JavaScript toLocaleString西语地区仅格式化日/月无前置零问题
解决Date.prototype.toLocaleString在es-ES地区仅格式化日/月时无前置零的问题
这个问题本质是ECMAScript国际化API遵循了西班牙语(西班牙)地区的本地化日期格式规则:当只指定日和月时,默认采用日常使用的短格式(不带前置零),而一旦加入年份参数,就会切换到带前置零的正式格式。
两种可行的解决办法:
1. 强制使用严格匹配的格式规则
通过添加formatMatcher: 'basic'选项,让API严格遵循你指定的2-digit格式要求,忽略地区默认的短格式规则:
const dateObj = new Date(2023, 0, 1); console.log(dateObj.toLocaleString("es-ES", { day: "2-digit", month: "2-digit", formatMatcher: 'basic' })); // 输出:01/01
2. 手动提取并拼接格式化后的日和月
利用Intl.DateTimeFormat.formatToParts方法拆分日期组件,单独提取带前置零的日和月后拼接:
const dateObj = new Date(2023, 0, 1); const formatter = new Intl.DateTimeFormat('es-ES', { day: '2-digit', month: '2-digit' }); const parts = formatter.formatToParts(dateObj); const day = parts.find(p => p.type === 'day').value; const month = parts.find(p => p.type === 'month').value; console.log(`${day}/${month}`); // 输出:01/01
需要注意的是,toLocaleDateString方法也存在同样的问题,上述两种方案同样适用。
内容的提问来源于stack exchange,提问作者rapomon
相关产品推荐
相关产品推荐

