/**
 * 格式化日期处理(归一化)
 * @param {Date} date 日期对象
 * 辅助方法
 * */

let _formatNormalize = (formatter)=>{
    // 判断如果传的是函数就直接返回
    if(typeof formatter === 'function'){
        return formatter;
    }
    if(typeof formatter !== 'string'){
        throw new TypeError("formatter must be a string")
    }
    if(formatter === 'date'){
        formatter = 'yyyy-MM-dd'
    }else if(formatter === 'datetime'){
        formatter = 'yyyy-MM-dd HH:mm:ss'
    }
    const formatterFunc = (dateInfo)=>{
        const {yyyy,MM,dd,HH,mm,ss,ms} = dateInfo;
                
        return formatter.replace("yyyy",yyyy)
                        .replace('MM',MM)
                        .replace('dd',dd)
                        .replace('HH',HH)
                        .replace('mm',mm)
                        .replace('ss',ss)
                        .replace('ms',ms);
    }
    return formatterFunc;    
 }


 
/**
 * 调用这个方法:参数(日期,'yyyy年MM月dd日',true:是否补0) 
 * 返回:str:2023年05月31日
*/
 

let $formate = (date,formatter,isPad=false)=>{
    formatter = _formatNormalize(formatter)
    const dateInfo = {
        year:date.getFullYear(),
        month:date.getMonth() + 1,
        date:date.getDate(),
        hour:date.getHours(),
        minute:date.getMinutes(),
        second:date.getSeconds(),
        miniSecond:date.getMilliseconds(),
    };
    dateInfo.yyyy = dateInfo.year.toString();
    dateInfo.MM = dateInfo.month.toString();
    dateInfo.dd = dateInfo.date.toString();
    dateInfo.HH = dateInfo.hour.toString();
    dateInfo.mm = dateInfo.minute.toString();
    dateInfo.ss = dateInfo.second.toString();
    dateInfo.ms = dateInfo.miniSecond.toString();
    
    function _pad(prop,len){
        dateInfo[prop] = dateInfo[prop].padStart(len,'0');
    }
    if(isPad){
        _pad('yyyy',4);
        _pad('MM',2);
        _pad('dd',2);
        _pad('HH',2);
        _pad('mm',2);
        _pad('ss',2);
        _pad('ms',2);
    }
    const result = formatter(dateInfo);
    return result;
 }

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐