如何将数字1,2,3转为一,二,三 js

比如2019年11月12日,想转为二零一九年十一月十二日

阅读 16.2k
6 个回答

如果是单纯的数字转换可以通过预定键值对来简单实现

const data = {
  '0': '零',
  '1': '一',
  '2': '二',
  '3': '三',
  '4': '四',
  '5': '五',
  '6': '六',
  '7': '七',
  '8': '八',
  '9': '九',
};
let str = '2019年11月12日';

let result = str.split('').map(v => data[v] || v).join('');

console.log(result);

不过这样转换出来的 是 一一月一二日而不是你要的十一月十二日,不知道有没有现成的库,或者也可以自己根据上面的代码逻辑改善下

function CNDateString(date) {
            var cn = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九", '十'];
            var dateArr = date.split(/年|月|日/g);
            function setEqual(str, isTenUnit) {
                let newStr = '';
                if (isTenUnit) {
                    //是否大于10的倍数
                    let ci = Number(str) % 10;
                    let cv =  ci > 1 ? cn[ci] + cn[10] + cn[ci] : cn[10] + cn[ci];
                    //是否大于10
                    newStr = str.length > 1 ? str.replace(str, cv) : str.replace(str, cn[str]);
                } else {
                    for (let i = 0; i < str.length; i++) {
                        newStr += str[i].replace(str[i], cn[str[i]])
                    }
                }
                return newStr;
            }
            return setEqual(dateArr[0], false) + '年' + setEqual(dateArr[1], true) + '月' + setEqual(dateArr[2], true) + '日';
        }

不同的实现思路

更新时间:2019年04月04日

function toZh_cn(str) {
  const z = '零一二三四五六七八九十'
  let [y, m, d] = str.split(/[年月日]/gi)
  return y.replace(/\d/g, i => z[i]) + '年' + to(m) + '月' + to(d) + '日'
  function to(s) {
    if (s >= 10) {
      let _s = s
      s = s.split('').join('十')
      if (_s < 20) {
        s = s.substr(1)
      }
    }
    return s.replace(/\d/g, (i, j) => ((j == 0 && i == 0) || (s.length - 1 === j && i == 0) ? '' : z[i]))
  }
}
console.log(toZh_cn('2019年01月01日'))
新手上路,请多包涵
// 格式为xxxx年xx月xx日
    const xxx = '2019年05月28日';
    const yearsArr = new Array("零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"); //年的数字
    const monthArr = new Array("十", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"); //月的数字
    let year = yearsArr[+xxx.slice(0,1)] + yearsArr[+xxx.slice(1,2)] + yearsArr[+xxx.slice(2,3)] + yearsArr[+xxx.slice(3,4)]
 
    let month = +xxx.slice(5,7) <= 10 ?  monthArr[+xxx.slice(6,7)] :  monthArr[0] + monthArr[+xxx.slice(6,7)]
 
    let day = +xxx.slice(8,10) <= 10 ?  monthArr[+xxx.slice(9,10)] : +xxx.slice(8,10) < 20 ? monthArr[0] + monthArr[+xxx.slice(9,10)] :  monthArr[2] + monthArr[0] + monthArr[+xxx.slice(9,10)]

    let res = year + '年' + month+ '月' + day + '日'
    console.log(res);
// [CNDateString 函数参见][1]
function CNDateString(date) {
    var cn = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"];
    var arr = [];
    var YY = date.getFullYear().toString();
    for (var i = 0; i < YY.length; i++) {
        if (cn[YY.charAt(i)]) {
            arr.push(cn[YY.charAt(i)]);
        }
    }
    arr.push("年");
    var MM = date.getMonth() + 1;
    if (MM < 10) {
        arr.push(cn[MM]);
    }
    else if (MM < 20) {
        arr.push("十" + cn[MM % 10]);
    }
    arr.push("月");
    var DD = date.getDate();
    if (DD < 10) {
        arr.push(cn[DD]);
    }
    else if (DD < 20) {
        arr.push("十" + cn[DD % 10]);
    }
    else {
        arr.push("二十" + cn[DD % 10]);
    }
    arr.push("日");
    return arr.join('');
}
var str = '2019年05月28日';
var reg = /\d+/g;
// 将 '2019年05月28日' 转换成 '2019,05,28'
// 利用 Date 构造函数生成时间对象
var timerStr = str.match(reg).join(',');
console.log(CNDateString(new Date(timerStr)));

缺点是将 “05” 转换成了 “五”

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题