# stringify对Date格式化

function dateFormat(date, fmt) {
    if (null == date || undefined == date) return '';
    var o = {
        "M+": date.getMonth() + 1, //月份
        "d+": date.getDate(), //日
        "h+": date.getHours(), //小时
        "m+": date.getMinutes(), //分
        "s+": date.getSeconds(), //秒
        "S": date.getMilliseconds() //毫秒
    };
    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
        if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
}

Date.prototype.toJSON = function () { return dateFormat(this,'yyyy-MM-dd')}
var data = new Date()
JSON.stringify(data)

归一化格式化时间函数

function _formatNormalize(formatter){
    if(typeof formatter === 'function') {
        return formatter;
    }
    if(typeof formatter !== 'string') {
        throw new Error('formatter must be a string or a function');
    }
    if(formatter === 'date') {
        formatter = 'yyyy-MM-dd';
    }
    else if(formatter === 'datetime') {
        formatter = 'yyyy-MM-dd HH:mm:ss';
    }

    return (dateInfo)=>{
        const {yyyy, MM, dd, HH, mm, ss} = dateInfo;
        return formatter
            .replace(/yyyy/g, yyyy)
            .replace(/MM/g, MM)
            .replace(/dd/g, dd)
            .replace(/HH/g, HH)
            .replace(/mm/g, mm)
            .replace(/ss/g, ss);
    }
}


/**
 * 格式化一个日期
 * @param {Date} date 日期对象 
 */
function formate(date, formatter, isPad = false) {
    formatter = _formatNormalize(formatter);
    const dateInfo = {
        yyyy: date.getFullYear(),
        MM: (date.getMonth() + 1).toString().padStart(isPad ? 2 : 1, '0'),
        dd: date.getDate().toString().padStart(isPad ? 2 : 1, '0'),
        HH: date.getHours().toString().padStart(isPad ? 2 : 1, '0'),
        mm: date.getMinutes().toString().padStart(isPad ? 2 : 1, '0'),
        ss: date.getSeconds().toString().padStart(isPad ? 2 : 1, '0'),
    }
    return formatter(dateInfo)
}

var date = formate(new Date(), 'yyyy-MM-dd HH:mm:ss', true);
console.log(date);
更新时间: 2024年8月13日星期二上午9点03分