
const DDmoment = function (date) {
    let time;
    if (!date) {
        time = new Date()
    }else if(date){
        time=new Date(date);
    }
    return {
        time,
        format,
        subtract,
        getTime,
    }
}

/**
 * @content 前多少天
 * @param  days  天 ||  years 年  || months 月 ||  weeks 周 
 * @returns 
 */
function subtract(num, type) {
    let time = this.time
    time.setTime(time.getTime()-getNeedTime(num, type))
    time=new Date(time)
    return {
        time,
        format,
        getTime
    }
}

/**
 * @param  Yy年  ||  M 月  || Dd 日 ||  Hh 时 || m 分 || Ss 秒
 * @returns 
 */
function format(fmt) {
    let date = this.time
    let ret;
    const opt = {
        "Y+": date.getFullYear().toString(),        // 年
        "y+": date.getFullYear().toString(),        // 年
        "M+": (date.getMonth() + 1).toString(),     // 月
        "d+": date.getDate().toString(),            // 日
        "D+": date.getDate().toString(),            // 日
        "h+": date.getHours().toString(),           // 时
        "H+": date.getHours().toString(),           // 时
        "m+": date.getMinutes().toString(),         // 分
        "S+": date.getSeconds().toString(),         // 秒
        "s+": date.getSeconds().toString()          // 秒
        // 有其他格式化字符需求可以继续添加，必须转化成字符串
    };
    for (let k in opt) {
        ret = new RegExp("(" + k + ")").exec(fmt);
        if (ret) {
            fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
        };
    };
    return fmt;
}

//时间戳转时间
function getTime() {
    return new Date(this.time)
}

//获取需要的时间
function getNeedTime(num, type) {
    let time=0
    switch (type) {
        case "days":
            time= 3600 * 1000 * 24 * num;
            break;
        case "years":
            time=3600 * 1000 * 24 *365 *num;
            break;
        case "months":
            time = 3600 * 1000 * 24 *30* num;
            break;
        case "weeks":
            time= 3600 * 1000 * 24 *7* num;
            break;
        default:
            break;
    }
    return time;
}

export default DDmoment