js--参数归一化-日期格式化函数
// 参数归一化 // /* 日期时间格式化 date:日期时间 isFillZero:是否需要0补位 */ function formate(date,formater,isFillZero = false){ formater = _formatNormalize(formater) function _isFillZero(value,length){ if(isFillZero){ return (value + '').padStart(length,'0') }else{ return value.toString() } } const dateInfo = { year:date.getFullYear(), month:date.getMonth() + 1, day:date.getDate(), hour:date.getHours(), minute:date.getMinutes(), second:date.getSeconds(), millisecond:date.getMilliseconds(), } dateInfo.yyyy = _isFillZero(dateInfo.year,4) dateInfo.MM = _isFillZero(dateInfo.month,2) dateInfo.dd = _isFillZero(dateInfo.day,2) dateInfo.HH = _isFillZero(dateInfo.hour,2) dateInfo.mm = _isFillZero(dateInfo.minute,2) dateInfo.ss = _isFillZero(dateInfo.second,2) console.log(':dateInfo',formater(dateInfo)) return formater(dateInfo) } function _formatNormalize(formatter){ console.log('formatter',formatter) // formatter参数是一个函数 if(typeof formatter === 'function'){ return formatter } // 参数不是字符串,则抛出异常 if(typeof formatter !== 'string'){ throw new Error('formatter must be a string or a function') } return (dateInfo)=>{ console.log('dateInfo---',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); } } // 调用日期时间格式化可能的方法 // 格式:2024-1-1 // formate(new Date(),'date') // // 格式:2024-1-1 14:1:44 // formate(new Date(),'datetime') // // 格式:2024-01-01 // formate(new Date(),'date',true) // // 格式:2024-01-01 14:01:44 // formate(new Date(),'datetime',true) // // 格式:2024年01月01日 14:01:01:336 // formate(new Date(),'yyyy年MM月dd日 HH:mm:ss.ms',true) formate(new Date('2021/1/1'),(dateInfo)=>{ const {year} = dateInfo const thisYear = new Date().getFullYear(); if(year < thisYear){ return `${thisYear - year}年前`; }else if(year > thisYear){ return `${year - thisYear}年后`; }else{ return '今年' } })