SOURCE

// YYYY-MM-DD HH:mm:ss

// s = "2022"
// r = moment(s).format('YYYY');
// console.log(r) //

let i = "20220228"; // 输入文本 20 2022 20220 20222 20220228 20220229 202202281
let f = "YYYY-MM-DD"; // 输出格式

// 数字最后是否有输入一个非数字的字符串
let p = i.search(/[\-\.年月日\s]$/) == -1 ? false : true;
// console.log('p: ' + p)

// 用正则替换,只保留8位输入数字
i = i.replace(/[^\d]/g, '').substr(0, 8);
// console.log('输入的数字: "'+ i + '"')

// 格式化输出
o = ""

let formats = f.match(/YYYY|MM|DD/g), // 需要的格式顺序
seps = f.replace(/YYYY|MM|DD/g, '{!}').replace(/^{!}|{!}$/gm,'').split('{!}'), // 分隔符顺序
len = 0, // format长度
cut_str = i, // 待处理输入
sub_str = '', // 截取处理的输入段
is_error = false //输入格式是否有错
; 
// console.log('分隔符: ' , seps)

for (let format of formats) {
    len = format.length;

    if (cut_str.length <= 0) {
        break;
    }

    sub_str = cut_str.substr(0, len);
    cut_str = cut_str.substr(len, cut_str.length);

    switch (format) {
        case 'YYYY': // 年份段
            o += sub_str;
            break;
        case 'MM': // 月份段
            if (sub_str.substr(0, 1) > 1) { // 月份段开头输入大于1时,应该格式化成02、03、...、09
                if (!moment(sub_str).isValid()) {
                    is_error = true;
                    break;
                }
                o += moment(sub_str).format(format);
            } else {
                o += sub_str;
            }
            break;
        case 'DD': // 日数段
            if (sub_str.length > 1 || sub_str.substr(0, 1) > 2) { // 日数段输入长度大于1时 或者 开头输入大于2时
                if (!moment(o + sub_str).isValid()) {
                    is_error = true;
                    break;
                }
                o += moment(o + sub_str).format(format);
            } else {
                o += sub_str;
            }
            break;
        default:
            break;
    }

    // console.log('剩余数字: "'+ cut_str + '"')

    if (is_error) {
        break;
    }

    if (cut_str) {
        o += seps.shift();
    }

}

if (p && seps.length) {
    o += seps.shift();
}

if (is_error) {
    console.log("输入格式有错")
}
console.log("输出:"+ o)

console 命令行工具 X clear

                    
>
console