思路:使用一个对象表示标准格式与对象内容的对应,注意,其中同系列长的要在前面,因为要从前向后遍历,同时位数对齐也需要单独处理,最后遍历对象并使用replace方法依次替换即可。

function formatDate(date, format) 
{
    let addZero = function (data) {
        if (data < 10) {
            return '0' + data
        }
        return data
    }
    let obj = {
        'yyyy': date.getFullYear(),
        'yy': date.getFullYear() % 100,
        'MM': addZero(date.getMonth() + 1),
        'M': date.getMonth() + 1,
        'dd': addZero(date.getDate()),
        'd': date.getDate(),
        'HH': addZero(date.getHours()),
        'H': date.getHours(),
        'hh': addZero(date.getHours() % 12),
        'h': date.getHours() % 12,
        'mm': addZero(date.getMinutes()),
        'm': date.getMinutes(),
        'ss': addZero(date.getSeconds()),
        's': date.getSeconds(),
        'w': function () {
            arr = ['日', '一', '二', '三', '四', '五', '六']
            return arr[date.getDay()]
        }()
    }
    for (let i in obj) {
        format = format.replace(i, obj[i])
    }
    return format
}

总结:getFullYear获取年份,getMonth获取月份(实际月份需要加一),getDate获取日期,getHours获取小时,getMinutes获取分钟,getSeconds获取秒数,getDay获取星期。