將 2012年12月31日 轉為 二〇一二年十二月三十一日。
function numToCN(str) {
const cnNum = '〇一二三四五六七八九';
// 處理 月/日 部分 (1-2 位數字)
function toCN2(numStr) {
const n = parseInt(numStr, 10);
if (n >= 10 && n <= 19) return '十' + (n > 10 ? cnNum[n % 10] : '');
if (n >= 20) return cnNum[Math.floor(n/10)] + '十' + (n%10 ? cnNum[n%10] : '');
return cnNum[n];
}
// 替換 年 (4位) 月(1-2位) 日(1-2位)
return str.replace(/(\d{4})年(\d{1,2})月(\d{1,2})日/, (_, y, m, d) =>
y.split('').map(c => cnNum[c]).join('') + '年' +
toCN2(m) + '月' +
toCN2(d) + '日'
);
}
console.log(numToCN('2012年12月31日')); // 二〇一二年十二月三十一日
console.log(numToCN('2023年1月5日')); // 二〇二三年一月五日
function allDigitsToCN(str) {
return str.replace(/\d/g, c => '〇一二三四五六七八九'[c]);
}