最详细的解题思路和代码 每一步都做了注释。 个人建议在解题的时候,现在本地的代码编辑器中写一遍,等结果调试成功了再粘贴到网页中进行提交。

function formatDate(newDate, format) {

//定义函数  作用为在个位数前面加0
function add_0(num) {
    if (num < 10) {
        return "0" + num;
    } else {
        return num;
    }
}

//处理周 (跟 newDate.getDay() 配合)
let week = ["日", "一", "二", "三", "四", "五", "六"]

//定义一个对象 存放对传入日期处理之后的数据
const formatObj = {
    yyyy: newDate.getFullYear(), //年
    yy: newDate.getFullYear() % 100,

    MM: add_0(newDate.getMonth() + 1), //月 因为一月等于0
    M: newDate.getMonth() + 1,

    dd: add_0(newDate.getDate()), //日
    d: newDate.getDate(),

    HH: add_0(newDate.getHours()), //时 24小时制
    H: newDate.getHours(),
    hh: add_0(newDate.getHours() % 12), //时  12小时制
    h: newDate.getHours() % 12,

    mm: add_0(newDate.getMinutes()), //分
    m: newDate.getMinutes(),

    ss: add_0(newDate.getSeconds()), //秒
    s: newDate.getSeconds(),

    w: week[newDate.getDay()], //周   newDate.getDay():只能拿到数字
}

//将处理好的数据 去替换传入的格式
for (var k in formatObj) {
    // console.log(k); //yyyy yy mm m dd d HH H MM M SS S w

    //对传入的格式进行处理 
    //console.log(format.replace("yyyy", '21'));  //21-mm-dd HH:MM:ss 星期w

    format = format.replace(k, formatObj[k]) //k:对象中的属性 刚好对应格式中的名字  formatObj[k]:拿到属性值(将前面的进行替换)
}
return format;

} a = formatDate(new Date(1409894060000), "yy-M-d hh:m:s 星期w"); //2014-09-05 13:14:20 星期五 console.log(a);